zoukankan      html  css  js  c++  java
  • c# 继承,多态,new /overrid 区别, 引用父类的方法

    好久没碰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===
    ");
            }
    
            public new void M1()
            {
                //base.M1();//通过base引用父类
                Console.WriteLine("B:M1()
    ");
            }
    
            public override void M2()//abstract 和 virtual 一样,必需配合override使用,不同的是前者不能有具体的方法体。
            {
                //base.M2();
                Console.WriteLine("==concret method B:M2====
    ");
            }
        }
    
        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,谢谢!

  • 相关阅读:
    C# 枚举转换selectlistitem 及 MVC @Html.DropDownListFor() 调用详细
    C# WebRequest
    .net面试问答
    正则实现二代身份证号码验证详解
    VS2015 推荐插件
    ASP.NET MVC Areas View 引用 外部母版视图
    基于VMware Workstation搭建开发服务器
    使用ASP.NET WEB API 进行 JWT授权登录(二)
    使用ASP.NET WEB API 进行 JWT授权登录(一)
    如何五分钟完全卸载sqlserver 2012
  • 原文地址:https://www.cnblogs.com/Tommy-Yu/p/4028023.html
Copyright © 2011-2022 走看看