C泛型方法,泛型約束問題

時間 2021-08-30 09:16:56

1樓:匿名使用者

class templatewhere t : new() 這裡的 where t : new()不需要,

應該放在public static t createdataarray(int length) where t : new() 這裡

2樓:匿名使用者

泛型方法

在c#2.0中,方法可以定義特定於其執行範圍的泛型引數,如下所示:

public class myclass

//此方法也可不指定方法引數

public void mymethod()

}即使包含類不適用泛型引數,你也可以定義方法特定的泛型引數,如下所示:

public class myclass

//此方法也可不指定方法引數

public void mymethod()

}注意:屬性和索引器不能指定自己的泛型引數,它們只能使用所屬類中定義的泛型引數進行操作。

在呼叫泛型方法的時候,你可以提供要在呼叫場所使用的型別,如下所示:

//呼叫泛型方法

myclass myclass = new myclass();

myclass.mymethod(3);

泛型推理:在呼叫泛型方法時,c#編譯器足夠聰明,基於傳入的引數型別來推斷出正確的型別,並且它允許完全省略型別規範,如下所示:

//泛型推理機制呼叫泛型方法

myclass myclass = new myclass();

myclass.mymethod(3);

注意:泛型方法無法只根據返回值的型別推斷出型別,**如下:

public genericmethoddemo()

public class myclass

}泛型方法中泛型引數的約束,如下:

public class myclass

}您無法為類級別的泛型引數提供方法級別的約束。類級別泛型引數的所有約束都必須在類作用範圍中定義,**如下所示

public class myclass

}而下面的**是正確的

public class myclasswhere t:icomparable

}泛型引數虛方法的重寫:子類方法必須重新定義該方法特定的泛型引數,**如下

public class mybaseclass

}public class myclass :mybaseclass

}同時子類中的泛型方法不能重複基類泛型方法的約束,這一點和泛型類中的虛方法重寫是有區別的,**如下

public class mybaseclass

}public class myclass :mybaseclass

////錯誤 重寫和顯式介面實現方法的約束是從基方法繼承的,因此不能直接指定這些約束

//public override void somemethod(x x) where x:new()//}

子類方法呼叫虛擬方法的基類實現:它必須指定要代替泛型基礎方法型別所使用的型別實參。你可以自己顯式的指定它,也可以依靠型別推理(如果可能的話)**如下:

public class mybaseclass

}public class myclass :mybaseclass

}泛型委託

在某個類中定義的委託可以使用該類的泛型引數,**如下

public class myclass

}public genericmethoddemo()

委託推理:c#2.0使你可以將方法引用的直接分配轉變為委託變數。將上面的**改造如下

public class myclass

}public genericmethoddemo()

泛型委託的約束:委託級別的約束只在宣告委託變數和例項化委託時使用,類似於在型別和方法的作用範圍中實施的其他任何約束。

泛型和反射

在net2.0當中,擴充套件了反射以支援泛型引數。型別type現在可以表示帶有特定型別的實參(或繫結型別)或未指定型別的泛型(或稱未繫結型別)。

像c#1.1中那樣,您可以通過使用typeof運算子或通過呼叫每個型別支援的gettype()來獲得任何型別的type。**如下:

linkedlistlist = new linkedlist();

type type1 = typeof(linkedlist);

type type2 = list.gettype();

response.write(type1 == type2);

typeof和gettype()也可以對泛型引數進行操作,如下

public class myclass

}typeof還可以對未繫結的泛型進行操作,**如下

protected void page_load(object sender, eventargs e)

}public class myclass

}請注意"<>"的用法。要對帶有多個型別引數的未繫結泛型類進行操作,請在"<>"中使用","

type類中新增了新的方法和屬性,用於提供有關該型別的泛型方面的反射資訊,見msdn。

3樓:

public static t createdataarray(int length)  where t : new()

C中什麼是泛型和泛型的集合,泛型和泛型集合的區別

list這種就是泛型 現在這裡只說一下我自己的理解.高手莫罵.這裡的t可以是使用者自己定義的型別.例如現在相要一個int泛型集合 我們只要使用list就行了使用string 泛型集合 我們只要使用list就行了其實泛型集合更重要的功能是可以存入使用者自定義的類了. 所謂泛型,即通過引數化型別來實現在...

c泛型有什麼作用,C 泛型的意義是什麼?

比如泛型容器可以儲存不同型別的元素物件 c 泛型的意義是什麼? 範型的意義在於免去了型別之間互相轉換的系統開銷,和同類方法的過載,比如,add方法你要過載兩個方法 int和double 或者更多方法,用範型只用寫一個add方法就可以完成int,double,float.等等的相加,再如,集合的操作,...

C泛型的意義是什麼,C 中泛型的作用是什麼?

範型的意義在於免去了型別之間互相轉換的系統開銷,和同類方法的過載,比如,add方法你要過載兩個方法 int和double 或者更多方法,用範型只用寫一個add方法就可以完成int,double,float.等等的相加,再如,集合的操作,沒有往往是弱型別 object 而用範型可以直接是強型別,無需轉...