zoukankan      html  css  js  c++  java
  • C#中的new修饰符

    MSDN:在用作声明修饰符时,new 关键字可以显式隐藏从基类继承的成员。 隐藏继承的成员时,该成员的派生版本将替换基类版本。 虽然可以不使用 new 修饰符来隐藏成员,但将收到编译器警告。 如果使用 new 来显式隐藏成员,将禁止此警告。

     1 public class BaseClass
     2    {
     3        public void DisplayName()
     4        {
     5            Console.WriteLine("BaseClass");
     6        }
     7    }
     8  
     9 public class DerivedClass : BaseClass
    10    {
    11        public virtual void DisplayName()
    12        {
    13            Console.WriteLine("DerviedClass");
    14        }
    15    }
    16 
    17  public class SubDerviedClass : DerivedClass
    18    {
    19        public override void DisplayName()
    20        {
    21            Console.WriteLine("SubDerviedClass");
    22        }
    23    }
    24  
    25    public class SuperDerviedClass : SubDerviedClass
    26    {
    27        public new void DisplayName()
    28        {
    29            Console.WriteLine("SuperDerviedClass");
    30        }
    31    }
    View Code

    个人理解:

    C#和C++是一样的,类中的方法默认是sealed的,派生类是无法重写基类的同名函数的。

    SuperDerviedClass sdc = new SuperDerviedClass();

    依次将对象赋值给其他的类。分表调用DisplayName方法。

    SuperDerviedClass.DisplayName()输出SuperDerviedClass,因为该类没有派生,方法无法被重载。

    SuperDerviedClass.DisplayName()输出SubDerviedClass,该类的派生类的同名方法用new修饰,被隐藏。

    DerivedClass.DisplayName()输出SubDerviedClass,该类的最远派生类重写了改方法。,而再远的类使用new修饰符,方法被隐藏。

    Java的类中的方法默认是virtual的,任何派生类都可以重写父类的方法。

  • 相关阅读:
    python高级内置函数和各种推导式的介绍:一行搞定的代码
    迭代器、可迭代对象与生成器
    Git 从了解到放弃
    装饰器
    时间处理模块time
    map、filter、reduce、lambda
    python 发邮件
    日志模块
    office套件
    Nginx 实战(一) 集群环境搭建
  • 原文地址:https://www.cnblogs.com/Sinte-Beuve/p/4230911.html
Copyright © 2011-2022 走看看