C# Polymorphism
In this chapter you will learn:
Description
Polymorphism means a variable of type x can refer to an object that subclasses x. In detail:
- Derived class objects can be used whereever a base class object is expected.
- The virtual method is invoked on each of the derived classes, not the base class.
Example
For instance, consider the following method:
using System; //w w w. j a v a2 s .c o m
class Shape {
double pri_width; // private
double pri_height; // private
string pri_name; // private
public Shape() {
width = height = 0.0;
name = "null";
}
public Shape(double w, double h, string n) {
width = w;
height = h;
name = n;
}
public Shape(double x, string n) {
width = height = x;
name = n;
}
public Shape(Shape ob) {
width = ob.width;
height = ob.height;
name = ob.name;
}
// Properties for width, height, and name
public double width {
get { return pri_width; }
set { pri_width = value; }
}
public double height {
get { return pri_height; }
set { pri_height = value; }
}
public string name {
get { return pri_name; }
set { pri_name = value; }
}
public void showDim() {
Console.WriteLine("Width and height are " +
width + " and " + height);
}
public virtual double area() {
Console.WriteLine("area() must be overridden");
return 0.0;
}
}
class Triangle : Shape {
string style; // private
public Triangle() {
style = "null";
}
public Triangle(string s, double w, double h) :
base(w, h, "triangle") {
style = s;
}
public Triangle(double x) : base(x, "triangle") {
style = "isosceles";
}
public Triangle(Triangle ob) : base(ob) {
style = ob.style;
}
// Override area() for Triangle.
public override double area() {
return width * height / 2;
}
// Display a triangle's style.
public void showStyle() {
Console.WriteLine("Triangle is " + style);
}
}
class Rectangle : Shape {
public Rectangle(double w, double h) : base(w, h, "rectangle"){ }
public Rectangle(double x) : base(x, "rectangle") { }
// Construct an object from an object.
public Rectangle(Rectangle ob) : base(ob) { }
// Return true if the rectangle is square.
public bool isSquare() {
if(width == height) return true;
return false;
}
// Override area() for Rectangle.
public override double area() {
return width * height;
}
}
class DynShapes {
public static void Main() {
Shape[] shapes = new Shape[5];
shapes[0] = new Triangle("right", 8.0, 12.0);
shapes[1] = new Rectangle(10);
shapes[2] = new Rectangle(10, 4);
shapes[3] = new Triangle(7.0);
shapes[4] = new Shape(10, 20, "generic");
for(int i=0; i < shapes.Length; i++) {
Console.WriteLine("object is " + shapes[i].name);
Console.WriteLine("Area is " + shapes[i].area());
Console.WriteLine();
}
}
}
The code above generates the following result.
Next chapter...
What you will learn in the next chapter:
- What are C# Virtual Function Members
- Example for Virtual Function Members
- virtual methods from parent classes
- What is new versus virtual
- What are virtual properties and how to use virtual properties