读书人

小例证大智慧2-C#中的多态Polymorphism

发布时间: 2013-09-09 20:31:09 作者: rapoo

小例子大智慧2--C#中的多态Polymorphism

以上篇的实体类型为引子,我就直接贴过来了:

Person实例类型:

public class Person
{
public string Name;

public string Sex;

public int Age;

//构造函数,初始化
public Person()
{
this.Name = "张三";
this.Sex = "男";
this.Age = 30;
}

public string SayHi()
{
return "Hell!How are you?";
}

//virtual修饰符进行修饰来启用多态
public virtual string Hello()
{
return "Hell!How are you?";
}
}

加了一个Hello方法,并且看到有个字符去修饰,目的就是为了实现重写

Student实例类型:

public class Student : Person
{

public int CJ;

//构造函数,初始化
public Student()
{
this.CJ = 90;
}

public string SayHi()//使用new有意隐藏基类方法
{
return "你好啊!....";
}

public override string Hello()//重写
{
return "你好啊!....";
}
}

override重写hello方法,实现多态

页面aspx页面的设计

<body>
<form id="form1" runat="server">
<div>
不用重写多态:<br />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label><br />
<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label><br />
重写多态:<br />
<asp:Label ID="Label3" runat="server" Text="Label"></asp:Label><br />
<asp:Label ID="Label4" runat="server" Text="Label"></asp:Label>
</div>
</form>
</body>

后台.cs文件中代码

protected void Page_Load(object sender, EventArgs e)
{
//不用重写多态
Person[] p = new Person[2];
p[0] = new Person();
p[1] = new Student();
foreach (var l in p)
{
if (l is Student)
{
Student s = l as Student;
Label1.Text = s.SayHi();
}
else if (l is Person)
{
Person t = l as Person;
Label2.Text = t.SayHi();
}
}
//重写多态
Person[] persons = new Person[2];
persons[0] = new Person();
persons[1] = new Student();
int index = 0;
foreach (var z in persons)
{
++index;
if (index == 1)
{
Label3.Text = z.Hello();
}
else
{
Label4.Text = z.Hello();
}
}

}

如果不用重写实现多态的话,第一种方法如果加一个实例类怎么办?

第二种能很好的体现出来,不用区分。

页面显示结果:

不用重写多态:
你好啊!....
Hell!How are you?
重写多态:
Hell!How are you?
你好啊!....

读书人网 >C#

热点推荐