C#中继承的多态性

有很久没写博客了,最近学C#。哎~说来惭愧,各种语言都学得不精啊,学了C++,学到了一半,现在又转头学其他的。主要是大学课程的安排很不合理(至少我是这么认为的)。没门都没学精,老师讲得都是很基础的,要学精还是要靠自己,而C++完全是自学的。。。

好吧,不多说了,多态的意思是一种事物有多种形态,其实为什么写这个,主要是我想和java进行区别,之前学习java语言,在继承的多态上也花了不少时间,而C#却有点不同,虽然思想都是一样的。但是C#还是有点奇怪的,可能是我看得这本书的问题吧。它是这么描述的:为了使用派生类能更改基类的数据和行为,C#提供了两种选择:一是使用新的派生成员替换基成员,二是重写虚拟的基成员。接下来详细用代码解释下。

1.使用new关键字重新定义类的成员,代码如下:

    class A
    {
        public string doIt()
        {
            return "调用A类方法";
        }
    }
    class B : A
    {
        public new string doIt()
        {
            return "调用B类方法";
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            B b = new B();
            A a = new B();
            Console.WriteLine(b.doIt());
            Console.WriteLine(a.doIt());
        }
    }

代码的输出结果是:

调用B类方法

调用A类方法

分析:这种使用new关键字在派生类中声明与基类同名方法的方法,并不是继承的多态性(书上原话),所以我也有点纳闷,那它还放在继承的多态性来讲,可能是想让读者区别和另外一种的不同吧。因为从上面可以看出,程序只认准了变量的类型,如上面的a变量,它调用了A类的方法,而没有按照多态的原理去调用B类的方法。另外,再说下,如果上面的B类中不使用关键字new,编译也是可以通过的,但是会出现警告的东西。(亲测)好吧,我们看看下面的另外一种情况。

2.用virtual和override关键字定义类成员,代码如下:

    class A
    {
        public virtual string doIt()
        {
            return "调用A类方法";
        }
    }
    class B : A
    {
        public override string doIt()
        {
            return "调用B类方法";
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            B b = new B();
            A a = new B();
            A aa = new A();
            Console.WriteLine(b.doIt());
            Console.WriteLine(a.doIt());
            Console.WriteLine(aa.doIt());
        }
    }

程序输出结果:

调用B类方法
调用B类方法
调用A类方法

分析:从上面的结果可以看出,这才是继承的多态性。其实和java一样,只是多了两个关键字,virtual和override。

好吧,这次就到这里了,如有什么错误,欢迎各位大牛指出。联系:229047554@qq.com。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值