zoukankan      html  css  js  c++  java
  • C#中的隐藏方法

    在C#中要重写基类的方法,C#提倡在基类中使用virtual来标记要被重写的方法,在子类也就是派生类中用override关键字来修饰重写的方法。

    要是项目中前期考虑不足,我没有在基类(ClassA)中写入Amethod方法,但是派生类(ClassB)中由于需求早早的写完了Amethod方法,并且又有许多类(ClassC,ClassD..)又继承了派生类(ClassB),并且重写了Amethod方法。当这个时候我又想向最初的基类中(ClassA)添加Amethod方法,这就是存在一个潜在的错误,C#语法会在程序编译的时候提示出警告,需要给派生类(ClassB)重写的方法添加一个关键字“New”,以表示它会隐藏基类中的Amethod方法。

    为什么在java中就不需要这么麻烦呢?(在java中,如果不base.Amethod,那就直接认为调用最新的子类中的重写方法。)

    那是因为在java中,所有的函数都是虚拟的,可被重写的。但这无疑降低了性能。

    看代码理解:

     1 public class People
     2     {
     3         public People()
     4         {
     5             Console.WriteLine("father' custor");
     6         }
     7         public void Eat()
     8         {
     9             Console.WriteLine("father eat");
    10         }
    11     }
    12     class Man : People
    13     {
    14         private int age;
    15         public int Age
    16         {
    17             get 
    18             {
    19                 Console.WriteLine("age get");
    20                 return age;
    21             }
    22             set
    23             {
    24                 Console.WriteLine("age set = ",value);
    25                 age = value;
    26             }
    27         }
    28         public Man()
    29         {
    30             Console.WriteLine("son's custor");
    31         }
    32         public void WhoEat()
    33         {
    34             base.Eat();
    35         }
    36         
    37         public new void Eat()
    38         {
    39             base.Eat();
    40             Console.WriteLine("son eat!");
    41         }
    42     }
    43 
    44     class Children :Man
    45     {
    46         public new void Eat() { Console.WriteLine("children eat!"); }
    47     }
  • 相关阅读:
    android中requestFocus
    @SuppressLint("NewApi")和@TargetApi()的区别
    Gradle基础
    Gradle build-info.xml not found for module app.Please make sure that you are using gradle plugin '2.0.0-alpha4' or higher.
    Duplicate files copied in APK META-INF/DEPENDENCIES
    解决Gradle DSL method not found: ‘android()’
    SSL peer shut down incorrectly
    如何测试远端TCP和UDP端口是否开放
    方法总比困难多
    图灵简传
  • 原文地址:https://www.cnblogs.com/forbetter223/p/10607295.html
Copyright © 2011-2022 走看看