With Web

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

对多态性的理解

Posted on 2007-03-02 00:21  kejian of 20  阅读(284)  评论(0编辑  收藏  举报

在C#的OOP中,多态性是个比较重要的概念,
总的来说,它就是一个“对象指针”的体现,而且它是通过派生类重载基类中的虚函数型方法来实现的。
举个简单例子说明一下:
using System;
using System.Collections.Generic;
using System.Text;

namespace Practice
{
    public class MyClass : BaseClass
    {
        public int Val = 20;
        public override void Dosomething()
        {
            Console.WriteLine(Val);
        }
    }
    public class BaseClass
    {
        public int BaseVal = 10;
        public virtual void Dosomething()
        {
            Console.WriteLine(BaseVal);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            MyClass op1 = new MyClass();
            BaseClass op2 = op1
            BaseClass op3 = new BaseClass();

            op1.Dosomething();
            op2.Dosomething();
            op3.Dosomething();

            op1.Val = 30;

            op1.Dosomething();
            op2.Dosomething();
            op3.Dosomething();
        }
    }
}
在这个控制台种,MyClass继承基类BaseClass并重写了Dosomething() 这个方法, 这对于多态性的体现尤为重要;在Main()中,先实例的派生类op1,然后实例化基类op2,注意,在这个地方 :BaseClass op2 = op1 ,这才是真正实现多态性的地方,说得直白些,就是令 op1 与 op2 拥有“同一个”指针(事实上,是指向同一地址的两个指针),而且是同时指向MyClass的实例op1 . 现在是 op1 或 op2 中的一方改变,令一方亦变 . 在后面,将op1中的Val改变来证实这个结果.