This part builds the OO foundation for programming in C#. In the following chapters, I have made comparisons between how both C# and Java fulfill their support for object-oriented programming. This part has been written with the assumption that you are a Java developer. Hence I will not go through basic OO concepts and those 'why' questions (such as 'why do we want abstract methods?'; 'why are interfaces good?'; 'why do we need constants?'; etc.) but zoom in on the differences between the two languages.