Ploymorphism Video
Difference between method overriding and method hiding - Video
Explain polymorphism in C# with a simple example?
Polymorphism allows you to invoke derived class methods through a base class reference during run-time. An example is shown below.
using System;
public class DrawingObject
{
public virtual void Draw()
{
Console.WriteLine("I am a drawing object.");
}
}
public class Triangle : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I am a Triangle.");
}
}
public class Circle : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I am a Circle.");
}
}
public class Rectangle : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I am a Rectangle.");
}
}
public class DrawDemo
{
public static void Main()
{
DrawingObject[] DrawObj = new DrawingObject[4];
DrawObj[0] = new Triangle();
DrawObj[1] = new Circle();
DrawObj[2] = new Rectangle();
DrawObj[3] = new DrawingObject();
foreach (DrawingObject drawObj in DrawObj)
{
drawObj.Draw();
}
}
}
When can a derived class override a base class member?
A derived class can override a base class member only if the base class member is declared as virtual or abstract.
What is the difference between a virtual method and an abstract method?
A virtual method must have a body where as an abstract method should not have a body.
Can fields inside a class be virtual?
No, Fields inside a class cannot be virtua. Only methods, properties, events and indexers can be virtual.
Give an example to show for hiding base class methods?
Use the new keyword to hide a base class method in the derived class as shown in the example below.
using System;
public class BaseClass
{
public virtual void Method()
{
Console.WriteLine("I am a base class method.");
}
}
public class DerivedClass : BaseClass
{
public new void Method()
{
Console.WriteLine("I am a child class method.");
}
public static void Main()
{
DerivedClass DC = new DerivedClass();
DC.Method();
}
}
Can you access a hidden base class method in the derived class?
Yes, Hidden base class methods can be accessed from the derived class by casting the instance of the derived class to an instance of the base class as shown in the example below.
using System;
public class BaseClass
{
public virtual void Method()
{
Console.WriteLine("I am a base class method.");
}
}
public class DerivedClass : BaseClass
{
public new void Method()
{
Console.WriteLine("I am a child class method.");
}
public static void Main()
{
DerivedClass DC = new DerivedClass();
((BaseClass)DC).Method();
}
}
how can base class method hidden can any body explain clearly?
ReplyDeleteYOu can make use new keyword in derived class' method. Once you use new keyword it gonna hide parent class' method
Deleteuse the new keyword to the hide the members of the base class
ReplyDeleteIf methods with same signature is declared in both base and derived class and they are not declared as virtual and override respectively then derived class version is said to hide base class version.
ReplyDeleteWhat is the difference between a virtual method and an abstract method?
ReplyDeleteA virtual method must have a body where as an abstract method should not have a body.
Another difference:
A Base class virtual method may or may not be overridden in the Derived class where as a Base class Abstract method has to be implemented by the derived class.
What is the advantage we will get if we use run time polymorphism? I mean, i can create the child class object and invoke the child class method instead storing the child class object in base class reference. Can any one please tell the benefit that we will get with polymorphism?
ReplyDeleteHi,
ReplyDeleteclass Program
{
static void Main(string[] args)
{
//Console.WriteLine("Hello World!");
add(1, 2);
Console.ReadKey();
}
public static void add(short i, short j)
{
Console.WriteLine("First Method");
}
public static void add(int i, int j)
{
Console.WriteLine("Second Method");
}
public static void add(long i, long j)
{
Console.WriteLine("Thrid Method");
}
}
Output: Second Method
Why is call second method, if datatype size matter then it should be called first method instead of second method.
by default number in c# is system.Int32. that's call goes to second method.
Delete