C 的new關鍵字的幾種用法

2021-06-22 07:28:34 字數 1554 閱讀 5319

1.new 運算子用於建立物件和呼叫建構函式:

test01 test = new test01();

new 運算子還可以用於建立值型別的預設建構函式:

int i = new int();

i被初始化為0,因為它是int型別的預設值。該語句等同於:int i = 0;

如果new運算子分配記憶體失敗,則它將引發outofmemoryexception異常.

不能過載new 運算子

請記住,為結構宣告預設的建構函式是錯誤的,因為每乙個值型別都隱式具有乙個公共的預設建構函式。可以在結構型別上宣告引數化建構函式以設定其初始值,但是,只有在需要預設值之外的值時才必須這樣做。

值型別物件(例如結構)是在堆疊上建立的,而引用型別物件(例如類)是在堆上建立的。兩種型別的物件都是自動銷毀的,但是,基於值型別的物件是在超出範圍時銷毀,而基於引用型別的物件則是在對該物件的最後乙個引用被移除之後在某個不確定的時間銷毀。對於占用固定資源(例如大量記憶體、檔案控制代碼或網路連線)的引用型別,有時需要使用確定性終止以確保物件被盡快銷毀

2.new 修飾符可以顯式隱藏從基類繼承的成員,隱藏繼承的成員時,該成員的派生版本將替換基類版本。雖然可以在不使用new修飾符的情況下隱藏成員,但會生成警告,如果用new顯示隱藏成員,則會取消該警告,並記錄要替換為派生版本這一事實。如要隱藏繼承的成員,請使用相同名稱在派生類中宣告該成員,並使用new修飾符修飾該成員。例如:

class program
}

class test:program
}
在此示例中,test.testmethod隱藏了program.testmethod。欄位x不受影響,因為它沒有被類似名稱的字段隱藏。
通過繼承隱藏名稱採用以下形式之一:
1。引入類或結構中的常數,指定,屬性或型別隱藏具有相同名稱的所有基類成員。
2。引入類或結構中的方法隱藏基類中具有相同名稱的屬性,欄位和型別,同時也隱藏具有相同簽名的所有基類方法。
3。引入類或結構中的索引器將具有相同名稱的所有基類索引器。
對同一成員同時使用new和override是錯誤的做法,因為這兩個修飾符的含義互斥,new修飾符會用同樣的名稱建立乙個新成員並使原始成員變為隱藏的。override修飾符會擴充套件繼承成員的實現,在不隱藏繼承成員的宣告中使用new修飾符將會生成警告。

3.new 約束指定泛型類宣告中的任何型別引數都必須有公共的無引數建構函式,如果使用new約束,則該型別不能為抽象型別。
當泛型型別建立型別的新例項,請將new 約束應用於型別引數,如下面示例所示
class itemfactorywhere t : new()
}
當與其他約束一起使用時,new()約束必須最後指定:
public class itemfactory2
where t : icomparable, new()

C 的New關鍵字的幾種用法

前段時間乙個朋友問到c 的new關鍵字有幾種用法,雖說在日常程式設計中經常用到這個小傢伙,但它到底有幾種用法還真沒有留意過,現將從網上總結出的資料記下以供同仁學習。1 new 運算子 用於建立物件和呼叫建構函式。2 new 修飾符 用於隱藏基類成員的繼承成員。3 new 約束 用於在泛型宣告中約束可...

C 的New關鍵字的幾種用法

前段時間乙個朋友問到c 的new關鍵字有幾種用法,雖說在日常程式設計中經常用到這個小傢伙,但它到底有幾種用法還真沒有留意過,現將從網上總結出的資料記下以供同仁學習。1 new 運算子 用於建立物件和呼叫建構函式。2 new 修飾符 用於隱藏基類成員的繼承成員。3 new 約束 用於在泛型宣告中約束可...

C 的New關鍵字有幾種用法

前段時間乙個朋友問到c 的new關鍵字有幾種用法,雖說在日常程式設計中經常用到這個小傢伙,但它到底有幾種用法還真沒有留意過,現將從網上總結出的資料記下以供同仁學習。1 new 運算子 用於建立物件和呼叫建構函式。2 new 修飾符 用於隱藏基類成員的繼承成員。3 new 約束 用於在泛型宣告中約束可...