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

顯式地代表隱藏基類中的同名類

相關文章
相關標籤/搜索