C#中的new修饰符

(1)new 运算符 用于建立对象和调用构造函数
(2)new 修饰符 用于隐藏基类成员的继承成员。
(3)new 约束 用于在泛型声明中约束可能用做类型参数的参数的类型。

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

复制代码
 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    }
复制代码

我的理解:函数

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

SuperDerviedClass sdc = new SuperDerviedClass();

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

SuperDerviedClass.DisplayName()输出SuperDerviedClass,由于该类没有派生,方法没法被重载。spa

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

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

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

 

 

C#语言仍是比较常见的东西,这里咱们主要介绍C# new修饰符,包括介绍C# new修饰符与 new 操做符是两个概念等方面。对象

C# new修饰符是起什么做用?blog

◆C# new修饰符与 new 操做符是两个概念;

◆C# new修饰符用于声明类或类的成员,表示隐藏了基类中同名的成员。而new 操做符用于实例化一个类型;

◆C# new修饰符只能用于继承类,通常用于弥补基类设计的不足;

◆C# new修饰符和 override 修饰符不可同时用在一个成员上,由于这两个修饰符在含义上互相排斥。

示例:

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4. namespace Example09  
  5. {  
  6. class BaseClass  
  7. {  
  8. //基类设计者声明了一个PI的公共变量,方便进行运算  
  9. public static double PI = 3.1415;  
  10. }  
  11. class DervieClass : BaseClass  
  12. {  
  13. //继承类发现该变量的值不能知足运算精度,因而能够经过new修饰符显式隐藏基类中的声明  
  14. public new static double PI = 3.1415926;  
  15. }  
  16. class Program  
  17. {  
  18. static void Main(string[] args)  
  19. {  
  20. Console.WriteLine(BaseClass.PI);  
  21. Console.WriteLine(DervieClass.PI);  
  22.    
  23. Console.ReadLine();  
  24. }  
  25. }  

定义类

 

修饰符

注释

internal

默认修饰符,当前项目内部访问

public

能够有其它项目访问

abstract

抽象类,不能实例化,只能继承

sealed

密封类,只能实例化,不能继承

 

定义成员

在类的修饰符的约束下,成员的修饰符有以下特性。

 

修饰符

注释

public

能够由任何代码访问

private

默认修饰符,成员只能由类中的代码访问

internal

只能由定义它的程序集(项目)内部的代码访问

protected

只能由类或派生类中的代码访问

 

定义字段

字段用标准的变量声明格式和前面介绍的修饰符来定义。

 

修饰符

注释

readonly

只能在执行构造函数的过程当中,或由初始化赋值语句赋值

static

必须经过定义它们的类来访问

const

同static,必须经过定义它们的类来访问

new

用于继承类中,显式地代表隐藏基类中的同名字段

 

定义方法

 

修饰符

注释

static

必须经过定义它们的类来访问

virtual

方法能够重写

abstract

方法必须在非抽象的派生类中重写,只用于抽象类中

override

方法编写了一个基类方法(若是方法被重写,就必须使用该关键字)

extern

方法定义放在其余地方

new

用于继承类中,显式地代表隐藏基类中的同名方法

 

定义嵌套类

在类的修饰符的约束下,成员的修饰符有以下特性。

 

修饰符

注释

new

显式地代表隐藏基类中的同名类

相关文章
相关标签/搜索