C#泛型中new和where是重要的關鍵字,它們都可以用於約束泛型類型參數的限制;它們都用於提高代碼的安全性和可用性,它們的作用在很大程度上提高了代碼的可讀性和可維護性。在這篇文章中,我們將一起瞭解泛型中的new和where,以及它們之間的區別。 1. new關鍵字 在C#泛型中,new關鍵字被用於 ...
C#泛型中new和where是重要的關鍵字,它們都可以用於約束泛型類型參數的限制;它們都用於提高代碼的安全性和可用性,它們的作用在很大程度上提高了代碼的可讀性和可維護性。在這篇文章中,我們將一起瞭解泛型中的new和where,以及它們之間的區別。
1. new關鍵字
在C#泛型中,new關鍵字被用於指定泛型類型參數必須具有公共的無參數構造函數。
使用new關鍵字指定泛型類型參數需要有無參數構造函數時,可以保證我們在使用泛型類型參數來創建實例時不會發生運行時錯誤。如果我們使用了沒有公共無參數構造函數的泛型類型參數,就會在運行時拋出異常。
使用示例:
class ItemFactory<T> where T : new()
{
public T Fun()
{
var t=new T();
return t;
}
}
//調用:
public class Test
{
public void Testfun()
{
var rel= new ItemFactory<Pet>();
rel.Fun();
}
}
public class Pet
{
//new預設帶無參數構造函數,如果有參數的構造函數報錯
//public Pet(string test)
//{ }
public string Name { get; set; }
public int Age { get; set; }
}
.NET預設類帶一個無參數的構造函數。
2. where關鍵字
在C#泛型中,where關鍵字用於指定泛型類型參數的約束條件。泛型定義中的 where 子句指定對用作泛型類型、方法、委托或本地函數中類型參數的參數類型的約束。約束可指定介面、基類或要求泛型類型為引用、值或非托管類型。約束聲明類型參數必須具有的功能,並且約束必須位於任何聲明的基類或實現的介面之後。
使用示例:
//只允許類
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);
}
}
//只允許類和結構類型
class UsingClassStruct<T,U> where T : class where U : struct
{
public T Fun()
{
return default(T);
}
}
//歡迎公眾號:DOTNET開發跳槽,領取海量面試題
3、結語
本文簡單介紹了new和where關鍵字及它們的案例,new和where關鍵字都是C#泛型中非常重要的關鍵字,它們在代碼中起著至關重要的作用。學會正確使用和理解它們的區別,可以讓我們編寫更加安全、可讀和可維護的代碼。希望本文對你有所收穫,歡迎留言和吐槽。
參考:微軟官方文檔
來源公眾號:DotNet開發跳槽