• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

c#继承,多态,new/overrid区别,引用父类的方法

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

好久没碰c#了,偶尔需要制作点小工具。为了一个灵活的架构设计,需要对继承/多态有比较深刻的理解。

不料忘得差不多了,好吧,再来回忆下。直接上代码了,如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TestInherit
{
    class A
    {
        public A()
        {
            Console.WriteLine("==constructor of A===");
        }

        public void M1()
        {
            Console.WriteLine("A:M1()");
        }

        public virtual void M2()
        {
            Console.WriteLine("==abstract method A:M2====");
        }
    }

    class B : A
    {
        public B()
        {
            Console.WriteLine("==constructor of B===\r\n");
        }

        public new void M1()
        {
            //base.M1();//通过base引用父类
            Console.WriteLine("B:M1()\r\n");
        }

        public override void M2()//abstract 和 virtual 一样,必需配合override使用,不同的是前者不能有具体的方法体。
        {
            //base.M2();
            Console.WriteLine("==concret method B:M2====\r\n");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("====继承测试(new)===========");
            B b = new B();
            Console.Write("调用子类的同名方法:");
            b.M1();
            
            Console.WriteLine("====继承测试(overrid)===========");
            B bb = new B();
            Console.Write("调用子类的同名方法:");
            bb.M2();

            Console.WriteLine("====多态测试(new 关键字)===========");
            A b2 = new B();
            Console.Write("通过父类的引用调用同名方法:");
            b2.M1();// new 不支持多态
           

            Console.WriteLine("====多态测试(override 关键字)===========");
            A b3 = new B();
            Console.Write("通过父类的引用调用同名方法:");
            b3.M2();// overrid 不支持多态



            Console.Read();

        }
    }
}

  

 

 输出如下:

1. 在继承上, new/override没区别

2. 在多态上,new不支持多态,override支持

3. 构造函数会自动调用父类的。其他函数不会,需要显示通过 base.同名方法 进行调用

 

转载请注明来自:http://www.cnblogs.com/Tommy-Yu/p/4028023.html,谢谢!


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#-VS2019页面布局容器splitContainer和groupBox小结发布时间:2022-07-10
下一篇:
C#导入EXCEL发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap