OOP?

Abstraction

It allows complex real world to be represented in simplified manner. Example color is

abstracted to RGB. By just making the combination of these three colors we can achieve

any color in world.It’s a model of real world or concept.

Encapsulation

It is a process of hiding all the internal details of an object from the outside world.

Communication using messages

When application wants to achieve certain task it can only be done using combination of

objects. A single object can not do all the task. Example if we want to make order processing

form.We will use Customer object, Order object, Product object and Payment object to

achieve this functionality. In short these objects should communicate with each other.

This is achieved when objects send messages to each other.

Object lifetime

All objects have life time.Objects are created ,and initialized, necessary functionalities

are done and later the object is destroyed. Every object have there own state and identity

which differ from instance to instance.

Class hierarchies (Inheritance and aggregation)

Twist :- What is difference between Association, Aggregation and Inheritance relationships?

In object oriented world objects have relation and hierarchies in between them. There are

basically three kind of relationship in Object Oriented world :-

Association

This is the simplest relationship between objects. Example every customer has sales. So

Customer object and sales object have an association relation between them.

Aggregation

This is also called as composition model. Example in order to make a “Accounts” class it

has use other objects example “Voucher”, “Journal” and “Cash” objects. So accounts

class is aggregation of these three objects.

202

Inheritance

Hierarchy is used to define more specialized classes based on a preexisting generalized

class. Example we have VEHICLE class and we can inherit this class make more

specialized class like CAR, which will add new attributes and use some existing qualities

of the parent class. Its shows more of a parent-child relationship. This kind of hierarchy

is called inheritance.

Polymorphism

When inheritance is used to extend a generalized class to a more specialized class, it

includes behavior of the top class(Generalized class). The inheriting class often implement

a behavior that can be somewhat different than the generalized class, but the name of the

behavior can be same. It is important that a given instance of an object use the correct

behavior, and the property of polymorphism allows this to happen automatically.

(B) How can we acheive inheritance in VB.NET ?

Note:- The following explanation is for VB.NET

Inheritance is achieved by using “Inherits” keyword in VB.NET (For C# it is “:”). Simple

Sample is provided in CD for understanding inheritance in folder

“WindowsApplicationInheritance”. There are two classes one is the parent “ClsParent”

and second is the child “ClsChild”. Parent class has a string which has to parsed for junk

data “@” and “/”.ClsParent has the functionality which parses only cleans up

“@”.”ClsChild” then inherits from parent and adds extra functionality by parsing “/”.

Public Class ClsParent

Protected strData As String = “jksdhkj@dadad///ajkdhsjakd”

Public Function Parse() As String

Dim PstrData As String

PstrData = strData

PstrData = Replace(PstrData, “@”, “”)

Return PstrData

End Function

Public Function GetActualString() As String

Return strData

End Function

End Class

Above is the source which parses only “@” of strData variable.

203

Public Class ClsChild

Inherits ClsParent

‘ this is child and a special parse function is added which will

also parse “/”

Public Function ParseBackSlash()

Dim PstrData As String

PstrData = Me.Parse()

PstrData = Replace(PstrData, “/”, “”)

Return PstrData

End Function

End Class

Above is the source code for “ClsChild” which does the remaining work. It adds extra

functionality by parsing “/” junk character’s of the data.

Note:- Strdata was accessible only because it was defined as protected in the parent class.

Figure :- 6.1 Inheritance in action

(I) What are abstract classes ?

Following are features of a abstract class :-

You can not create a object of abstract class

204

Abstract class is designed to act as a base class (to be inherited by other classes).

Abstract class is a design concept in program development and provides a

base upon which other classes are built.

Abstract classes are similar to interfaces. After declaring an abstract class, it

cannot be instantiated on its own, it must be inherited.

In VB.NET abstract classes are created using “MustInherit” keyword.In C#

we have “Abstract” keyword.

Abstract classes can have implementation or pure abstract methods which

should be implemented in the child class.

Note:- In order to understand the concept simple sample of add and multiply functionality

is implemented in “WindowsAbstract” folder in CD.

From interview point of view just saying using “MustInherit” keyword is more than enough

to convince that you have used abstract classes. But to clear simple fundamental let’s try

to understand the sample code. There are two classes one is “ClsAbstract” class and

other is “ClsChild” class. “ClsAbstract” class is a abstract class as you can see the

mustinherit keyword. It has one implemented method “Add” and other is abstract method

which has to be implemented by child class “MultiplyNumber”. In the child class we

inherit the abstract class and implement the multiplynumber function.

Definitely this sample does not take out actually how things are implemented in live

projects. Basically you put all your common functionalities or half implemented

functionality in parent abstract class and later let child class define the full functionality

of the abstract class. Example i always use abstract class with all my SET GET properties

of object in abstract class and later make specialize classes for insert, update, delete for

the corresponding entity object.

Public MustInherit Class ClsAbstract

‘ use the mustinherit class to declare the class as abstract

Public Function Add(ByVal intnum1 As Integer, ByVal intnum2 As

Integer) As Integer

Return intnum1 + intnum2

End Function

‘ left this seconf function to be completed by the inheriting

class

Public MustOverride Function MultiplyNumber(ByVal intnum1 As

Integer, ByVal intnum2 As Integer) As Integer

End Class

205

Public Class ClsChild

Inherits ClsAbstract

‘ class child overrides the Multiplynumber function

Public Overrides Function MultiplyNumber(ByVal intnum1 As

Integer, ByVal intnum2 As Integer) As Integer

Return intnum1 * intnum2

End Function

End Class

Figure :- 6.2 Abstract classes in action

My attitude towards abstract class has been that i put all my common functionality in

abstract class.

(B) What is a Interface ?

Interface is a contract that defines the signature of the functionality. So if a class is

implementing a interface it says to the outer world, that it provides specific behavior.

Example if a class is implementing Idisposable interface that means it has a functionality

to release unmanaged resources. Now external objects using this class know that it has

contract by which it can dispose unused unmanaged objects.

Single Class can implement multiple interfaces.

If a class implements a interface then it has to provide implementation to all

its methods.

206

Note:- In CD sample “WindowsInterFace” is provided, which has a simple interface

implemented.

In sample there are two files.One has the interface definition and other class implements

the interface. Below is the source code “IInterface” is the interface and “ClsDosomething”

implements the “IInterface”. This sample just displays a simple message box.

Public Interface IInterFace

Sub DoSomething()

End Interface

Public Class ClsDoSomething

Implements IInterFace

Public Sub DoSomething() Implements

WindowsInterFace.IInterFace.DoSomething

MsgBox(“Interface implemented”)

End Sub

End Class

Figure:- 6.3 Interface in action

207

(A) What is difference between abstract classes and

interfaces?

Following are the differences between abstract and interfaces :-

Abstract classes can have concrete methods while interfaces have no methods

implemented.

Interfaces do not come in inheriting chain, while abstract classes come in

inheritance.

(B) What is a delegate ?

Delegate is a class that can hold a reference to a method or a function. Delegate class has

a signature and it can only reference those methods whose signature is compliant with the

class. Delegates are type-safe functions pointers or callbacks.

Below is a sample code which shows a example of how to implement delegates.

Public Class FrmDelegates

Inherits System.Windows.Forms.Form

Public Delegate Sub DelegateAddString()

Private Sub FrmDelegates_Load(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

Private Sub AddString()

lstDelegates.Items.Add(“Running AddString() method”)

End Sub

Private Sub cmdDelegates_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles cmdDelegates. Click

Dim objDelegateAddString As DelegateAddString

objDelegateAddString = AddressOf AddString

objDelegateAddString.Invoke()

End Sub

End Class

In the above there is a method called “AddString()” which adds a string to a listbox.You

can also see a delegate declared as :-

Public Delegate Sub DelegateAddString()

This delegate signature is compatible with the “AddString” method. When I mean

compatibility that means that there return types and passing parameter types are same.

208

Later in command click of the button object of the Delegate is created and the method

pointer is received from “AddressOf ” keyword. Then by using the “Invoke” method the

method is invoked.

Figure :- 6.4 Delegate in Action

(B) What are events ?

As compared to delegates events works with source and listener methodology. So listeners

who are interested in receiving some events they subscribe to the source. Once this

subscription is done the source raises events to its entire listener when needed. One

source can have multiple listeners.

In sample given below class “ClsWithEvents” is a event source class, which has a event

“EventAddString()”. Now the listeners who are interested in receiving this events they

can subscribe to this event. In class “FrmWithEvents” you can see they handle clause

which is associated with the “mobjClsWithEvents” objects.

Public Class ClsWithEvents

Event EventAddString(ByVal Value As String)

Public Sub AddString()

RaiseEvent EventAddString(“String added by Event”)

End Sub

End Class

209

Public Class FrmWithEvents

Inherits System.Windows.Forms.Form

Private WithEvents mobjClsWithEvents As New ClsWithEvents()

Private Sub FrmWithEvents_Load(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

Private Sub mobjClsWithEvents_EventAddString(ByVal Value As

String) Handles mobjClsWithEvents.EventAddString

LstData.Items.Add(Value)

End Sub

Private Sub CmdRunEvents_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles CmdRunEvents.Click

mobjClsWithEvents.AddString()

End Sub

End Class

Figure :- 6.5 Events in action

Nore:- Above source code is provided in “WindowsEvent”

210

(I) Do events have return type ?

No, events do not have return type.

(A) Can event’s have access modifiers ?

Event’s are always public as they are meant to serve every one register ing to it. But you

can access modifiers in events.You can have events with protected keyword which will

be accessible only to inherited classes.You can have private events only for object in that

class.

(A) Can we have shared events ?

Yes, you can have shared event’s note only shared methods can raise shared events.

(I) What is shadowing ?

When two elements in a program have same name, one of them can hide and shadow the

other one. So in such cases the element which shadowed the main element is referenced.

Below is a sample code, there are two classes “ClsParent” and “ClsShadowedParent”. In

“ClsParent” there is a variable “x” which is a integer. “ClsShadowedParent” overrides

“ClsParent” and shadows the “x” variable to a string.

Note:- In Sample CD “WindowsShadowing” is folder which has the sample code. If you

run the program you can have two output’s one which shows a integer and other which shows

a string.

Public Class ClsParent

Public x As Integer

End Class

Public Class ClsShadowedParent

Inherits ClsParent

Public Shadows x As String

End Class

211

Figure :- 6.6 Shadowing in Action

(A) What is the difference between Shadowing and

Overriding ?

Following are the differences between shadowing and overriding :-

Overriding redefines only the implementation while shadowing redefines the

whole element.

In overriding derived classes can refer the parent class element by using “ME”

keyword, but in shadowing you can access it by “MYBASE”.

(I) What is the difference between delegate and events?

Actually events use delegates in bottom. But they add an extra layer on the

delegates, thus forming the publisher and subscriber model.

As delegates are function to pointers they can move across any clients. So any

of the clients can add or remove events, which can be pretty confusing. But

events give the extra protection by adding the layer and making it a publisher

and subscriber model.

212

Just imagine one of your clients doing this

c.XyzCallback = null

This will reset all your delegates to nothing and you have to keep searching where the

error is.

(B) If we inherit a class do the private variables also get

inherited ?

Yes, the variables are inherited but can not be accessed directly by the class interface.

(B) What are the different accessibility levels defined in .NET

?

Following are the five levels of access modifiers :-

Private : Only members of class have access.

Protected :-All members in current class and in derived classes can access the

variables.

Friend (internal in C#) :- Only members in current project have access to the

elements.

Protected friend (protected internal in C#) :- All members in current project

and all members in derived class can access the variables.

Public :- All members have access in all classes and projects.

(I) Can you prevent a class from overriding ?

If you define a class as “Sealed” in C# and “NotInheritable” in VB.NET you can not

inherit the class any further.

(I) What is the use of “MustInherit” keyword in VB.NET ?

If you want to create a abstract class in VB.NET it’s done by using “MustInherit”

keyword.You can not create an object of a class which is marked as “MustInherit”. When

you define “MustInherit” keyword for class you can only use the class by inheriting.

213

Note :- There was huge typo in my previous versions for the above two questions. I hope

some one has not lost good oppurtunity because of the same. Thanks to all my readers for

pointing it out.

(I) Do interface have accessibility modifier?

All elements in Interface should be public. So by default all interface elements are public

by default.

(A) What are similarities between Class and structure ?

Following are the similarities between classes and structures :-

Both can have constructors, methods, properties, fields, constants,

enumerations, events, and event handlers.

Structures and classes can implement interface.

Both of them can have constructors with and without parameter.

Both can have delegates and events.

(A) What is the difference between Class and structure’s ?

Following are the key differences between them :-

Structure are value types and classes are reference types. So structures use

stack and classes use heap.

Structures members can not be declared as protected, but class members can

be. You can not do inheritance in structures.

Structures do not require constructors while classes require.

Objects created from classes are terminated using Garbage collector. Structures

are not destroyed using GC.

(B) What does virtual keyword mean ?

They are that method and property can be overridden.

(B) What are shared (VB.NET)/Static(C#) variables?

214

Static/Shared classes are used when a class provides functionality which is not specific to

any instance. In short if you want an object to be shared between multiple instances you

will use a static/Shared class.

Following are features of Static/Shared classes :-

They can not be instantiated. By default a object is created on the first method

call to that object.

Static/Shared classes can not be inherited.

Static/Shared classes can have only static members.

Static/Shared classes can have only static constructor.

Note :- In CD there is a folder “WindowsShared” which has a sample code for shared

variables.Below is a snippet. It has a “AddCount” function which increments a static

“intCount” variable. In form there are two buttons which creates a new object and displays

the count of the static variable. Even though the object is created and destroyed, the variable

values does not change. It retains its old value.

Public Class ClsShared

Shared intCount As Integer

Public Function AddCount() As Integer

intCount = intCount + 1

Return intCount

End Function

End Class

Public Class FrmSharedClasses

Inherits System.Windows.Forms.Form

Private Sub CmdInstance1_Click(ByVal sender As System.Object, ByVal

e As System.EventArgs) Handles CmdInstance1.Click

Dim pobjClsShared As New ClsShared()

MessageBox.Show(“The count at this moment is” &

pobjClsShared.AddCount.ToString())

End Sub

Private Sub CmdInstance2_Click(ByVal sender As System.Object, ByVal

e As System.EventArgs) Handles CmdInstance2.Click

Dim pobjClsShared As New ClsShared()

MessageBox.Show(“The count at this moment is” &

pobjClsShared.AddCount.ToString())

215

End Sub

End Class

Figure :- 6.7 Shared/Static In Action

(B) What is Dispose method in .NET ?

.NET provides “Finalize” method in which we can clean up our resources. But relying on

this is not always good so the best is to implement “Idisposable” interface and implement

the “Dispose” method where you can put your clean up routines.

(B) What is the use of “OverRides” and “Overridable”

keywords ?

Overridable is used in parent class to indicate that a method can be overridden. Overrides

is used in the child class to indicate that you are overriding a method

(A) Where are all .NET Collection classes located ?

216

System.Collection namespace has all the collection classes available in .NET.

(A) What is ArrayList ?

Array is whose size can increase and decrease dynamically. Array list can hold item of

different types. As Array list can increase and decrease size dynamically you do not have

to use the REDIM keyword. You can access any item in array using the INDEX value of

the array position.

(A) What’s a HashTable ?

Twist :- What’s difference between HashTable and ArrayList ?

You can access array using INDEX value of array, but how many times you know the

real value of index. Hashtable provides way of accessing the index using a user identified

KEY value, thus removing the INDEX problem.

(A) What are queues and stacks ?

Queue is for first-in, first-out (FIFO) structures. Stack is for last-in, first-out (LIFO)

structures.

(B) What is ENUM ?

It’s used to define constants.

(A) What is nested Classes ?

Nested classes are classes within classes. In sample below “ClsNested” class has a

“ChildNested” class nested inside it.

Public Class ClsNested

Public Class ChildNested

Public Sub ShowMessage()

MessageBox.Show(“Hi this is nested class”)

End Sub

End Class

End Class

This is the way we can instantiate the nested class and make the method call.

Dim pobjChildNested As New ClsNested.ChildNested()

pobjChildNested.ShowMessage()

217

Note:-In CD the above sample is provided in “WindowsNestedClasses”.

(B)What is Operator Overloading in .NET?

It provides a way to define and use operators such as +, -, and / for user-defined classes

or structs. It allows us to define/redefine the way operators work with our classes and

structs. This allows programmers to make their custom types look and feel like simple

types such as int and string.

VB.NET till now does not support operator overloading. Operator overloading is done

by using the “Operator” keyword.

Note:- Operator overloading is supported in VB.NET 2005

(I) In below sample code if we create a object of class2

which constructor will fire first ?

Public Class Class1

Sub New()

End Sub

End Class

Public Class class2

Inherits Class1

Sub New()

End Sub

End Class

* I leave this to the readers……

(B)What is the significance of Finalize method in .NET?

.NET Garbage collector does almost all clean up activity for your objects. But unmanaged

resources (ex: – Windows API created objects, File, Database connection objects, COM

objects etc) is outside the scope of .NET framework we have to explicitly clean our

resources. For these types of objects .NET framework provides Object. Finalize method

218

which can be overridden and clean up code for unmanaged resources can be put in this

section.

(A)Why is it preferred to not use finalize for clean up?

Problem with finalize is that garbage collection has to make two rounds in order to remove

objects which have finalize methods.

Below figure will make things clear regarding the two rounds of garbage collection rounds

performed for the objects having finalized methods.

In this scenario there are three objects Object1, Object2 and Object3. Object2 has the

finalize method overridden and remaining objects do not have the finalize method

overridden.

Now when garbage collector runs for the first time it searches for objects whose memory

has to free. He can see three objects but only cleans the memory for Object1 and Object3.

Object2 it pushes to the finalization queue.

Now garbage collector runs for the second time. He see’s there are no objects to be

released and then checks for the finalization queue and at this moment it clears object2

from the memory.

So if you notice that object2 was released from memory in the second round and not first.

That’s why the best practice is not to write clean up Non.NET resources in Finalize

method rather use the DISPOSE.

219

Figure :- 6.8 Garbage collection in actions

(I)How can we suppress a finalize method?

GC.SuppressFinalize ()

(B)What is the use of DISPOSE method?

Dispose method belongs to IDisposable interface. We had seen in the previous section

how bad it can be to override the finalize method for writing the cleaning of unmanaged

resources. So if any object wants to release its unmanaged code best is to implement

220

IDisposable and override the Dispose method of IDisposable interface. Now once your

class has exposed the Dispose method it’s the responsibility of the client to call the

Dispose method to do the cleanup.

(A)How do I force the Dispose method to be called

automatically, as clients can forget to call Dispose method?

Note :- I admire this question.

Call the Dispose method in Finalize method and in Dispose method suppress the finalize

method using GC.SuppressFinalize. Below is the sample code of the pattern. This is the

best way we do clean our unallocated resources and yes not to forget we do not get the hit

of running the Garbage collector twice.

Note:- It will suppress the finalize method thus avoiding the two trip.

Public Class ClsTesting

Implements IDisposable

Public Overloads Sub Dispose()Implements IDisposable.Dispose

‘ write ytour clean up code here

GC.SuppressFinalize(Me)

End Sub

Protected Overrides Sub Finalize()

Dispose()

End Sub

End Class

(I)In what instances you will declare a constructor to be

private?

When we create a private constructor, we can not create object of the class directly from

a client. So you will use private constructors when you do not want instances of the class

to be created by any external client. Example UTILITY functions in project will have no

221

instance and be used with out creating instance, as creating instances of the class would

be waste of memory.

(I)Can we have different access modifiers on get/set

methods of a property ?

No we can not have different modifiers same property. The access modifier on a property

applies to both its get and set accessors.

(I)If we write a goto or a return statement in try and catch

block will the finally block execute ?

The code in then finally always run even if there are statements like goto or a return

statements.

(A)What is Indexer ?

An indexer is a member that enables an object to be indexed in the same way as an array.

(A)Can we have static indexer in C# ?

No.

(A)In a program there are multiple catch blocks so can it

happen that two catch blocks are executed ?

No, once the proper catch section is executed the control goes finally to block. So there

will not be any scenarios in which multiple catch blocks will be executed.

(A) What is the difference between System.String and

System.StringBuilder classes?

System.String is immutable; System.StringBuilder can have mutable string where a variety

of operations can be performed.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: