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的,任何派生类都可以重写父类的方法。

  • 相关阅读:
    模板代码生成器 Template Code Creater
    Oracle编程入门经典 第2章 SQLPlus和基本查询
    Oracle编程入门经典 第5章 体系结构
    数据仓库
    C++ WINDOWS API 第1章 Windows 应用程序开发入门
    C++ WINDOWS API 第2章 Windows API概要
    Oracle编程入门经典 第7章 表
    单交换机VLAN虚拟局域网划分
    Oracle日志文件被误删除
    Oracle编程入门经典 第4章 新9i示例模式
  • 原文地址:https://www.cnblogs.com/Sinte-Beuve/p/4230911.html
Copyright © 2011-2022 走看看