chuqi

博客园 首页 新随笔 联系 订阅 管理

一般我们指的多态性是指“运行时的多态性”,也就是在程序运行时,系统根据不同的对象确定调用对象所属类的相应方法的能力。

示例

namespace Cftea
{
    public class BaseClass
    {
        public virtual string GetStringVirtual()
        {
            return "基类虚方法。";
        }


        public string GetString()
        {
            return "基类方法。";
        }
    }

    public class DerivedClass : BaseClass
    {
        public override string GetStringVirtual()
        {
            return "派生类重写方法。";
        }


        public new string GetString()
        {
            return "派生类隐藏方法。";
        }
    }


    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            DerivedClass derivedClass = new DerivedClass();
            BaseClass baseClass = derivedClass;
            MessageBox.Show("derivedClass.GetStringVirtual() 结果是:" + derivedClass.GetStringVirtual() +
                "\r\n" +
                "baseClass.GetStringVirtual() 结果是:" + baseClass.GetStringVirtual() + "\r\n" +
                "derivedClass.GetString() 结果是:" + derivedClass.GetString() + "\r\n" +
                "baseClass.GetString() 结果是:" + baseClass.GetString());
        }
    }
}

运行结果是:

c-sharp多态性演示结果

我们可以看到,derivedClass 与 baseClass 类型不同,但是指向的都是 new DerivedClass():

  • 他们在调用 GetStringVirtual() 时,使用的都是派生类的。(多态性)
  • 他们在调用 GetString() 时,使用的是各自类型所在的方法。

从这里我们可以看出重写与隐藏的区别了。

posted on 2009-06-09 12:45  chu  阅读(88)  评论(0)    收藏  举报