C 中New關鍵字的三種用法

2021-06-17 01:02:39 字數 2140 閱讀 7179

三種用法如下:

在 c# 中,new 關鍵字可用作運算子、修飾符或約束。

1)new 運算子

2)new 修飾符

:在用作修飾符時,new 關鍵字可以顯式隱藏從基類繼承的成員。

3)new 約束

:用於在泛型宣告中約束可能用作型別引數的引數的型別。

關於第二種用法看下例:

using system;

public int truevalue

set }}

public class derivedb : basea

new public int truevalue

set }}

class test

}}

new約束指定泛型類宣告中的任何型別引數都必須具有公共的無引數建構函式.請看下例:

using system;

using system.collections.generic;

public employee(string s, int i)

public string name

set

}public int id

set }}

class itemfactorywhere t : new()

}public class test

'id is .", employeefactory.getnewitem().name, employeefactory.getnewitem().id);

}}}

見msdn上關於new的解釋

在用作修飾符時,new 關鍵字可以顯式隱藏從基類繼承的成員。

隱藏繼承的成員時,該成員的派生版本將替換基類版本。

雖然可以在不使用new 修飾符的情況下隱藏成員,但會生成警告。

如果使用 new 顯式隱藏成員,則會取消此警告,並記錄要替換為派生版本這一事實。

若要隱藏繼承的成員,請使用相同名稱在派生類中宣告該成員,並使用new 修飾符修飾該成員。

例如:

public class basec

}public class derivedc : basec

}

在此示例中,derivedc.invoke 隱藏了basec.invoke。

欄位x 不受影響,因為它沒有被類似名稱的字段隱藏。

通過繼承隱藏名稱採用下列形式之一:

對同一成員同時使用 new 和 override

是錯誤的做法,因為這兩個修飾符的含義互斥。

new 修飾符會用同樣的名稱建立乙個新成員並使原始成員變為隱藏的。

override 修飾符會擴充套件繼承成員的實現。

在不隱藏繼承成員的宣告中使用new 修飾符將會生成警告。

示例

在該例中,基類 basec 和派生類 derivedc 使用相同的欄位名 x,從而隱藏了繼承欄位的值。

該示例演示了 new 修飾符的用法。

另外還演示了如何使用完全限定名訪問基類的隱藏成員。

public class basec

public class derivedc : basec}/*

output:

10055

22*/

在此示例中,巢狀類隱藏了基類中同名的類。

此示例演示了如何使用new 修飾符來消除警告訊息,以及如何使用完全限定名來訪問隱藏的類成員。

public class basec 

}public class derivedc : basec

static void main()

}/*output:

100200

*/

如果移除new 修飾符,該程式仍可編譯和執行,但您會收到以下警告:

the keyword new is required on 'myderivedc.x' because it hides inherited member 'mybasec.x'.

NEW關鍵字的三種用法

第一種 建立物件 呼叫建構函式,這就不用講了 classa a new classa 第二種 是作為修飾符,顯示隱藏繼承於基類的繼承成員 第三種 是用在泛型中新增型別的約束 1class program abstract public class test public class class1 t...

this關鍵字的三種用法

this關鍵字 訪問本類內容。package cn.ly.day.seven.eighteen public class fupackage cn.ly.day.seven.eighteen super關鍵字用來訪問父類內容,而this關鍵字用來訪問本類內容 用法 1.在本類的成員方法中,訪問本類的...

this關鍵字的三種用法

在本類成員方法中,訪問本類成員變數 典型用法 在本類成員方法中,訪問本類成員變數 public class testdemo 在本類的成員方法中,訪問本類的另乙個成員方法 在本類成員方法中,訪問本類另乙個成員方法 public class testdemo 成員方法b public void met...