C#中new的幾種用法詳解
在 C# 中,new 關(guān)鍵字可用作運(yùn)算符、修飾符或約束。
new 運(yùn)算符
用于創(chuàng)建對象和調(diào)用構(gòu)造函數(shù)。
new 修飾符
用于向基類成員隱藏繼承成員。
new 約束
用于在泛型聲明中約束可能用作類型參數(shù)的參數(shù)的類型。
new 修飾符(C# 參考)
在用作修飾符時(shí),new 關(guān)鍵字可以顯式隱藏從基類繼承的成員。隱藏繼承的成員意味著該成員的派生版本將替換基類版本。在不使用 new 修飾符的情況下隱藏成員是允許的,但會生成警告。使用 new 顯式隱藏成員會取消此警告,并記錄代之以派生版本這一事實(shí)。
若要隱藏繼承的成員,請使用相同名稱在派生類中聲明該成員,并使用 new 修飾符修飾該成員
new 運(yùn)算符(C# 參考)
1.用于創(chuàng)建對象和調(diào)用構(gòu)造函數(shù)。例如:
Class1 o = new Class1();
2.也用于為值類型調(diào)用默認(rèn)的構(gòu)造函數(shù)
例:int myInt = new int();
myInt 初始化為 0,它是 int 類型的默認(rèn)值。該語句的效果等同于:int myInt = 0;
3.不能重載 new 運(yùn)算符。
4.如果 new 運(yùn)算符分配內(nèi)存失敗,則它將引發(fā) OutOfMemoryException 異常
new 約束(C# 參考)
new 約束指定泛型類聲明中的任何類型參數(shù)都必須有公共的無參數(shù)構(gòu)造函數(shù)。當(dāng)泛型類創(chuàng)建類型的新實(shí)例時(shí),將此約束應(yīng)用于類型參數(shù),如下面的示例所示:
class ItemFactory<T> where T : new() { public T GetNewItem() { return new T(); } }
通過繼承隱藏名稱采用下列形式之一:
1.引入類或結(jié)構(gòu)中的常數(shù)、指定、屬性或類型隱藏具有相同名稱的所有基類成員。
2.引入類或結(jié)構(gòu)中的方法隱藏基類中具有相同名稱的屬性、字段和類型。同時(shí)也隱藏具有相同簽名的所有基類方法。
3.引入類或結(jié)構(gòu)中的索引器將隱藏具有相同名稱的所有基類索引器。
4.在同一成員上同時(shí)使用 new 和 override 是錯誤的。
注意:在不隱藏繼承成員的聲明中使用 new 修飾符將生成警告。
示例
在該例中,嵌套類 MyClass 隱藏了基類中具有相同名稱的類。該例不僅說明了如何使用完全限定名訪問隱藏類成員,同時(shí)也說明了如何使用 new 修飾符消除警告消息。
using System; public class MyBaseC { public class MyClass { public int x = 200; public int y; } } public class MyDerivedC : MyBaseC { new public class MyClass // nested type hiding the base type members { public int x = 100; public int y; public int z; } public static void Main() { // Creating object from the overlapping class: MyClass S1 = new MyClass(); // Creating object from the hidden class: MyBaseC.MyClass S2 = new MyBaseC.MyClass(); Console.WriteLine(S1.x); Console.WriteLine(S2.x); } } 輸出 100 200
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持我們!
上一篇:C#實(shí)現(xiàn)Access通用訪問類OleDbHelper完整實(shí)例
欄 目:C#教程
下一篇:C# 基礎(chǔ)入門--常量
本文標(biāo)題:C#中new的幾種用法詳解
本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/5859.html
您可能感興趣的文章
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并打開的方法
- 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#停止線程的方法
- 01-10WinForm實(shí)現(xiàn)仿視頻 器左下角滾動新聞效果的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#實(shí)現(xiàn)讀取注冊表監(jiān)控當(dāng)前操作系統(tǒng)已安裝軟件變化的方法
- 01-10C#實(shí)現(xiàn)多線程下載文件的方法


閱讀排行
本欄相關(guān)
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻 器左下角滾動新
- 01-10C#停止線程的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實(shí)現(xiàn)讀取注冊表監(jiān)控當(dāng)前操作系統(tǒng)已