A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhangcheng5468 中级黑马   /  2013-7-4 08:07  /  1379 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

C#语言的三大特性封装、继承、多态,封装与继承相对比较好理解,我们今天主要来介绍一下多态性。C#语言支持两种类型的多态性:
1、编译时的多态性。一个类的对象调用若干同名方法,系统在编译时,根据调用方法的实参类型及实参的个数来决定调用哪个同名方法,实现何种操作。编译时的多态性是通过方法重载来实现的。
2、运行时的多态性。在系统运行时,不同对象调用一个名字形同、参数的类型及个数也完全一样的方法,会完成不同的操作。C#运行时的多态性是通过虚方法实现的。
     在类的方法声明前加上“virtual”关键字,这样的方法称为虚方法,反之为非虚方法。
     我们通过一个简单例子来看一下虚方法与非虚方法的区别
class Parent
    {
        //非虚方法
        public void SayHello()
        {
            Console.WriteLine("Parent:Hello");
        }
        //虚方法
        public virtual void SayHi()
        {
            Console.WriteLine("Parent:Hi");
        }
    }
    class Child : Parent
    {
        new public void SayHello()//隐藏基类的非虚方法要使用"new"关键字
        {
            Console.WriteLine("Child:Hello");
        }
        public override void SayHi()//隐藏基类的同名虚方法要使用"override关键字"
        {
            Console.WriteLine("Child:Hi");
        }
    }



class Program
    {
        static void Main(string[] args)
        {
            Parent parent = new Parent();
            Child child = new Child();
            Parent parent1 = new Child();

            parent.SayHello();//调用基类Parent的非虚方法     Parent:Hello
            parent1.SayHello();//调用基类Parent的非虚方法    Parent:Hello
            child.SayHello();//调用子类Child的非虚方法       Child:Hello

            parent.SayHi();//调用基类Parent的虚方法     Parent:Hi
            parent1.SayHi();//调用子类Child的虚方法     Child:Hi
            child.SayHi();//调用子类Child的虚方法       Child:Hi

            Console.ReadKey();
        }
    }

希望对初学者有所帮助{:soso_e104:}

1 个回复

倒序浏览
值得学习!顶一个~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马