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

来源:互联网 发布:mac输入法切换中文 编辑:程序博客网 时间:2024/04/29 21:42

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

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?
你好啊!....

原创粉丝点击