In this example we corrected the flaws in the previous example by using  "Virtual method in the Base class " and "overriding Virtual Method" in the Derived class

Step: 1 Create web site ( http://manas6/aspnet.35/mm.Polymorphism2/ )

 

Step: 2 Code

Base Class: Person.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Reflection;

/// <summary>
/// Summary description for Person
/// </summary>
//Constructors
public class Person
{
protected string firstname, lastname, strManager;
public string strConstr; string getInfo; MemberInfo mi;
public Person()
{
strConstr = " constructor with no parameter";
}
public Person(string firstname, string lastname, MemberInfo mi)
{
strConstr = " constructor accepts two parameters";
this.firstname = firstname;
this.lastname = lastname;
this.mi = mi;
}
public Person(string firstname, string lastname)
{
strConstr = " constructor accepts two parameters";
this.firstname = firstname;
this.lastname = lastname;

}

public virtual string person_name()
{

string str = " <font color='red' > " + mi.Name + " </font> " + this.firstname + " " + this.lastname;
return str;
}
public string m_name()
{
/// Get info on Manager class
Type myManager = typeof(Manager);
MemberInfo manager_info = typeof(Manager);

if (manager_info.Equals(myManager))
{
getInfo = manager_info.Name + " MetaDataToken : " + manager_info.MetadataToken.ToString() + " Verified";
}

return ( this.firstname + " " + this.lastname + " " + this.getInfo);
}
public string e_name()
{
Type myEmp = typeof(Employee);
MemberInfo emp_info = typeof(Employee);

// Employee class

if (emp_info.Equals(myEmp))
{
getInfo = emp_info.Name + " MetaDataToken " + emp_info.MetadataToken.ToString() + " Verified";

}

return (this.firstname + " " + this.lastname + " " + this.getInfo);
}
}

 

 

Derived Class: Manager.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Reflection;
/// <summary>
/// Summary description for Manager
/// </summary>
public class Manager:Person
{
protected string fn, ln; protected MemberInfo mi;
public Manager()
{

}
public Manager(string fn, string ln):base(fn,ln)
{
this.fn = fn;
this.ln = ln;
}

public Manager(string fn, string ln, MemberInfo mi):base(fn,ln,mi )
{
this.fn = fn;
this.ln = ln;
this.mi = mi;
}
public string manager_specific()
{
Person ps = new Person(this.fn, this.ln);
string local = ps.strConstr +"<br/> <font color='Green'>" + ps.m_name()+ "</font>";
return local;
}
public override string person_name()
{
return base.person_name();
}
}
 

Derived Class:Employee.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Reflection;
/// <summary>
/// Summary description for Employee
/// </summary>
public class Employee:Person
{
protected string fn, ln;
public Employee():base()
{
//
// TODO: Add constructor logic here
//
}
//using base key word
public Employee(string firstname, string lastname):base(firstname, lastname)
{
this.fn = firstname;
this.ln = lastname;
}

//
public Employee(string firstname, string lastname, MemberInfo mi):base(firstname, lastname, mi)

{
this.fn = firstname;
this.ln = lastname;
}
public override string person_name()
{
return base.person_name();
}
public string emp_specific()
{
MemberInfo mi = typeof(Employee);
Person ps = new Person(this.fn, this.ln);
string local = ps.strConstr + "<br/> <font color='Green'>" + ps.e_name() + "</font>";
return local;
}
}
 

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Debug="true"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>mm.Polymorphism2: Virtual/Override Example</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="L1" runat="server" Text=""></asp:Label>
</div>
</form>
</body>
</html>
 

Default.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Threading;
using System.Reflection;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
L1.Text += "<br/>-------- Using person_name method()";
//Type myEmp = typeof(Employee);
MemberInfo emp_info = typeof(Employee);
Employee emp = new Employee("Mary", "McDonald",emp_info);
L1.Text += "<br/>Display Employee's FullName : " + emp.person_name();
//Type myManager = typeof(Manager);
MemberInfo manager_info = typeof(Manager);
Manager manager = new Manager("John", "Smith",manager_info);
L1.Text += "<br/>Display Manager's FullName : " + manager.person_name();
L1.Text += "<br/>----------Using specific methods()";
L1.Text += "<br/> Display Manager's FullName " + manager.manager_specific();
L1.Text += "<br/>Display Employee's FullName " + emp.emp_specific();
}

}
 

Step: 3 Run Time analysis

Step: 4