zoukankan      html  css  js  c++  java
  • C#里的重写,淦!

    先定义两个类

        public  class A
        {
            protected  void fun1()
            {
                fun2();
            }
    
            protected    virtual  void fun2()
            {
                Console.WriteLine("A.fun2");
            }
        }
    
        public  class B : A
        {
            public  void Test()
            {
                base.fun1();
            }
    
            protected   void fun2()
            {
                Console.WriteLine("B.fun2");
            }
        }
        public class Program
        {
            public static void Main(string[] args)
            {
                //  CreateHostBuilder(args).Build().Run();
    
                B model = new B();
                model.Test();
    
            }

    客官可猜输出是什么?

    答案:  A.fun2

    然而我们修改一下class.B的代码

            protected  new  void fun2()
            {
                Console.WriteLine("B.fun2");
            }
    增加 new 关键词,覆盖  A的fun2
    然而输出的结果还是 A.fun2
             protected   override  void fun2()
            {
                Console.WriteLine("B.fun2");
            }
    客官可猜输出是什么? B.fun2

    如果在java中,我们第一次的代码就直接输出 B.fun2 ,因为 java 中同名方法会重写 父类方法,但是C# 中必须明确的用虚方法和 override关键词来重写父类方法

     我们再次改一下class.B的代码

    public  class B : A
        {
            public void fun1()
            {
                base.fun1();
            }
    
            public   void fun2()
            {
                Console.WriteLine("B.fun2");
            }
        }
        public class Program
        {
            public static void Main(string[] args)
            {
                //  CreateHostBuilder(args).Build().Run();
    
                A model = new B();
                model.fun1();
    
            }

     改动的地方我给加粗了,词时输出的是什么?依然是  A.fun2

    再改 ,输出 B.fun2

    再改

     public  class B : A
        {
            public void fun1()
            {
                fun1();
            }
    
            public    void fun2()
            {
                Console.WriteLine("B.fun2");
            }
        }

     输出 A.fun2 

      public  class B : A
        {
            public void fun1()
            {
                fun1();
            }
    
            public  override   void fun2()
            {
                Console.WriteLine("B.fun2");
            }
        }

    输出 B.fun2

    得出一个结论,当子类重写了父类的方法后,当子类代替父类出现时都将使用子类的 方法,而不使用自己父类的方法

  • 相关阅读:
    webservice的简单介绍
    如何在page_load方法判断是服务器端控件引发的page_load方法
    android架构概述
    页面传递数组参数
    XML与DataTable/DataSet互转
    jquery调用asp.net 页面后台方法
    asp.net缓存机制
    jQuery操作radio,checkbox,select
    jquery选择器
    android开发环境的搭建过程
  • 原文地址:https://www.cnblogs.com/netqq/p/14606906.html
Copyright © 2011-2022 走看看