(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 修飾符不可同時用在一個成員上,由於這兩個修飾符在含義上互相排斥。
示例:
修飾符 |
註釋 |
internal |
默認修飾符,當前項目內部訪問 |
public |
能夠有其它項目訪問 |
abstract |
抽象類,不能實例化,只能繼承 |
sealed |
密封類,只能實例化,不能繼承 |
在類的修飾符的約束下,成員的修飾符有以下特性。
修飾符 |
註釋 |
public |
能夠由任何代碼訪問 |
private |
默認修飾符,成員只能由類中的代碼訪問 |
internal |
只能由定義它的程序集(項目)內部的代碼訪問 |
protected |
只能由類或派生類中的代碼訪問 |
字段用標準的變量聲明格式和前面介紹的修飾符來定義。
修飾符 |
註釋 |
readonly |
只能在執行構造函數的過程當中,或由初始化賦值語句賦值 |
static |
必須經過定義它們的類來訪問 |
const |
同static,必須經過定義它們的類來訪問 |
new |
用於繼承類中,顯式地代表隱藏基類中的同名字段 |
修飾符 |
註釋 |
static |
必須經過定義它們的類來訪問 |
virtual |
方法能夠重寫 |
abstract |
方法必須在非抽象的派生類中重寫,只用於抽象類中 |
override |
方法編寫了一個基類方法(若是方法被重寫,就必須使用該關鍵字) |
extern |
方法定義放在其餘地方 |
new |
用於繼承類中,顯式地代表隱藏基類中的同名方法 |
在類的修飾符的約束下,成員的修飾符有以下特性。
修飾符 |
註釋 |
new |
顯式地代表隱藏基類中的同名類 |