where T:class 泛型類型約束

  對於一個定義泛型類型爲參數的函數,若是調用時傳入的對象爲T對象或者爲T的子類,在函數體內部若是須要使用T的屬性的方法時,咱們能夠給這個泛型增長約束;函數

  類的定義 spa

   public class ProductEntryInfo
    {
        [Description("商品編號")]
        public int ProductSysNo { get; set; }  
       //more
    }

    public class ProductEntryInfoEx : ProductEntryInfo
    {
       
        [Description("成份")]
        public string Component { get; set; }  
       //more
    }

  方法code

private static string CreateFile<T>(List<T> list)
            where T:ProductEntryInfo { int productSysNo =list[0].ProductSysNo 
 } 

 調用 對象

List<ProductEntryInfo> peList = new List<ProductEntryInfo>();
string fileName = CreateFile( peList);

List<ProductEntryInfoEx> peList = new List<ProductEntryInfoEx>();   
string fileNameEx = CreateFile(checkListAll);

  這樣就能夠實現上邊的CreateFile方法了blog

  這樣類型參數約束,.NET支持的類型參數約束有如下五種:繼承

    where T : struct | T必須是一個結構類型
    where T : class T必須是一個類(class)類型
    where T : new() | T必需要有一個無參構造函數
    where T : NameOfBaseClass | T必須繼承名爲NameOfBaseClass的類
    where T : NameOfInterface | T必須實現名爲NameOfInterface的接口接口

分別提供不一樣類型的泛型約束ip

  能夠提供相似get

class MyClass<T, U>
    where T : class
    where U : struct
{ }

 

在MSDN詳細說明:http://msdn.microsoft.com/zh-cn/library/bb384067.aspxstring

相關文章
相關標籤/搜索