C#泛型中new和where是重要的關(guān)鍵字,它們都可以用于約束泛型類型參數(shù)的限制;它們都用于提高代碼的安全性和可用性,它們的作用在很大程度上提高了代碼的可讀性和可維護(hù)性。在這篇文章中,我們將一起了解泛型中的new和where,以及它們之間的區(qū)別。
1. new關(guān)鍵字
在C#泛型中,new關(guān)鍵字被用于指定泛型類型參數(shù)必須具有公共的無(wú)參數(shù)構(gòu)造函數(shù)。
使用new關(guān)鍵字指定泛型類型參數(shù)需要有無(wú)參數(shù)構(gòu)造函數(shù)時(shí),可以保證我們?cè)谑褂梅盒皖愋蛥?shù)來(lái)創(chuàng)建實(shí)例時(shí)不會(huì)發(fā)生運(yùn)行時(shí)錯(cuò)誤。如果我們使用了沒(méi)有公共無(wú)參數(shù)構(gòu)造函數(shù)的泛型類型參數(shù),就會(huì)在運(yùn)行時(shí)拋出異常。
使用示例:
class ItemFactory<T> where T : new()
{
public T Fun()
{
var t=new T();
return t;
}
}
????//調(diào)用:
???? public class Test
{
public void Testfun()
{
var rel= new ItemFactory<Pet>();
rel.Fun();
}
}
????public??class?Pet
{
//new默認(rèn)帶無(wú)參數(shù)構(gòu)造函數(shù),如果有參數(shù)的構(gòu)造函數(shù)報(bào)錯(cuò)
//public Pet(string test)
//{ }
public string Name { get; set; }
public int Age { get; set; }
}
.NET默認(rèn)類帶一個(gè)無(wú)參數(shù)的構(gòu)造函數(shù)。
2. where關(guān)鍵字
在C#泛型中,where關(guān)鍵字用于指定泛型類型參數(shù)的約束條件。泛型定義中的 where 子句指定對(duì)用作泛型類型、方法、委托或本地函數(shù)中類型參數(shù)的參數(shù)類型的約束。約束可指定接口、基類或要求泛型類型為引用、值或非托管類型。約束聲明類型參數(shù)必須具有的功能,并且約束必須位于任何聲明的基類或?qū)崿F(xiàn)的接口之后。
使用示例:
//只允許類
class UsingClass<T> where T : class
{
public T Fun()
{
return default(T);
}
}
//只允許枚舉
class UsingEnum<T> where T : System.Enum
{
public T Fun()
{
return default(T);
}
????}
//只允許類和結(jié)構(gòu)類型
class UsingClassStruct<T,U> where T : class where U : struct
{
public T Fun()
{
return default(T);
}
????}
??//歡迎公眾號(hào):DOTNET開發(fā)跳槽,領(lǐng)取海量面試題???
3、結(jié)語(yǔ)
本文簡(jiǎn)單介紹了new和where關(guān)鍵字及它們的案例,new和where關(guān)鍵字都是C#泛型中非常重要的關(guān)鍵字,它們?cè)诖a中起著至關(guān)重要的作用。學(xué)會(huì)正確使用和理解它們的區(qū)別,可以讓我們編寫更加安全、可讀和可維護(hù)的代碼。希望本文對(duì)你有所收獲,歡迎留言和吐槽。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-424767.html
參考:微軟官方文檔文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-424767.html
來(lái)源公眾號(hào):DotNet開發(fā)跳槽
到了這里,關(guān)于深入理解C#泛型:new與where關(guān)鍵字全解析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!