C#中new的幾種用法詳解
在 C# 中,new 關(guān)鍵字可用作運(yùn)算符、修飾符或約束。
new 運(yùn)算符
用于創(chuàng)建對(duì)象和調(diào)用構(gòu)造函數(shù)。
new 修飾符
用于向基類(lèi)成員隱藏繼承成員。
new 約束
用于在泛型聲明中約束可能用作類(lèi)型參數(shù)的參數(shù)的類(lèi)型。
new 修飾符(C# 參考)
在用作修飾符時(shí),new 關(guān)鍵字可以顯式隱藏從基類(lèi)繼承的成員。隱藏繼承的成員意味著該成員的派生版本將替換基類(lèi)版本。在不使用 new 修飾符的情況下隱藏成員是允許的,但會(huì)生成警告。使用 new 顯式隱藏成員會(huì)取消此警告,并記錄代之以派生版本這一事實(shí)。
若要隱藏繼承的成員,請(qǐng)使用相同名稱在派生類(lèi)中聲明該成員,并使用 new 修飾符修飾該成員
new 運(yùn)算符(C# 參考)
1.用于創(chuàng)建對(duì)象和調(diào)用構(gòu)造函數(shù)。例如:
Class1 o = new Class1();
2.也用于為值類(lèi)型調(diào)用默認(rèn)的構(gòu)造函數(shù)
例:int myInt = new int();
myInt 初始化為 0,它是 int 類(lèi)型的默認(rèn)值。該語(yǔ)句的效果等同于:int myInt = 0;
3.不能重載 new 運(yùn)算符。
4.如果 new 運(yùn)算符分配內(nèi)存失敗,則它將引發(fā) OutOfMemoryException 異常
new 約束(C# 參考)
new 約束指定泛型類(lèi)聲明中的任何類(lèi)型參數(shù)都必須有公共的無(wú)參數(shù)構(gòu)造函數(shù)。當(dāng)泛型類(lèi)創(chuàng)建類(lèi)型的新實(shí)例時(shí),將此約束應(yīng)用于類(lèi)型參數(shù),如下面的示例所示:
class ItemFactory<T> where T : new()
{
public T GetNewItem()
{
return new T();
}
}
通過(guò)繼承隱藏名稱采用下列形式之一:
1.引入類(lèi)或結(jié)構(gòu)中的常數(shù)、指定、屬性或類(lèi)型隱藏具有相同名稱的所有基類(lèi)成員。
2.引入類(lèi)或結(jié)構(gòu)中的方法隱藏基類(lèi)中具有相同名稱的屬性、字段和類(lèi)型。同時(shí)也隱藏具有相同簽名的所有基類(lèi)方法。
3.引入類(lèi)或結(jié)構(gòu)中的索引器將隱藏具有相同名稱的所有基類(lèi)索引器。
4.在同一成員上同時(shí)使用 new 和 override 是錯(cuò)誤的。
注意:在不隱藏繼承成員的聲明中使用 new 修飾符將生成警告。
示例
在該例中,嵌套類(lèi) MyClass 隱藏了基類(lèi)中具有相同名稱的類(lèi)。該例不僅說(shuō)明了如何使用完全限定名訪問(wèn)隱藏類(lèi)成員,同時(shí)也說(shuō)明了如何使用 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
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!
- 詳解C#用new和override來(lái)實(shí)現(xiàn)抽象類(lèi)的重寫(xiě)區(qū)別
- 深入理解C#中new、override、virtual關(guān)鍵字的區(qū)別
- C#基礎(chǔ)知識(shí)之new關(guān)鍵字介紹
- C#中Override關(guān)鍵字和New關(guān)鍵字的用法詳解
- C#中new和override的區(qū)別個(gè)人總結(jié)
- .net(c#)中的new關(guān)鍵字詳細(xì)介紹
- 基于C# 中可以new一個(gè)接口?的問(wèn)題分析
- C# new和override的區(qū)別分析
- C#中new的用法及與override的區(qū)別分析
相關(guān)文章
C#編程實(shí)現(xiàn)統(tǒng)計(jì)文件夾內(nèi)文件和隱藏文件的方法示例
這篇文章主要介紹了C#編程實(shí)現(xiàn)統(tǒng)計(jì)文件夾內(nèi)文件和隱藏文件的方法,結(jié)合具體實(shí)例形式分析了C#針對(duì)文件與目錄的遍歷及屬性操作相關(guān)技巧,需要的朋友可以參考下2017-07-07
C#中在WebClient中使用post發(fā)送數(shù)據(jù)實(shí)現(xiàn)方法
這篇文章主要介紹了C#中在WebClient中使用post發(fā)送數(shù)據(jù)實(shí)現(xiàn)方法,需要的朋友可以參考下2014-08-08
C#使用GUID(全局統(tǒng)一標(biāo)識(shí)符)
這篇文章介紹了C#使用GUID(全局統(tǒng)一標(biāo)識(shí)符)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04
C#微信公眾平臺(tái)開(kāi)發(fā)之a(chǎn)ccess_token的獲取存儲(chǔ)與更新
這篇文章主要介紹了C#微信公眾平臺(tái)開(kāi)發(fā)之a(chǎn)ccess_token的獲取存儲(chǔ)與更新的相關(guān)資料,需要的朋友可以參考下2016-03-03

