[英]How to put an interface constraint on a generic method in C# 3.5?
我希望在C#3.5中實現這樣的目標:
public void Register<T>() : where T : interface {}
我可以用類或結構來做,但是如何使用接口呢?
如果您要求向特定接口添加約束,那么這很簡單:
public void Register<T>( T data ) where T : ISomeInterface
如果您詢問某個關鍵字是否像類或結構一樣存在,以限制T的可能類型范圍,那么這是不可用的。
雖然你可以寫:
public void Register<T>( T data ) where T : class // (or struct)
你不能寫:
public void Register<T>( T data ) where T : interface
C#和CLR不支持整體接口約束,但您可以將其約束到特定接口(請參閱其他答案)。 你可以得到的最接近的是'class'並且在運行時使用反射檢查類型我害怕。 為什么你首先想要一個接口約束?
您不能要求T是一個接口,因此您必須在運行時使用反射來斷言。
如果可能的話,我選擇了這樣的解決方案。 它只適用於您希望將幾個特定接口(例如,您具有源訪問權限的接口)作為通用參數傳遞,而不是任何接口。
IInterface
。 IInterface
在源代碼中,它看起來像這樣:
您希望作為通用參數傳遞的任何接口:
public interface IWhatever : IInterface { // IWhatever specific declarations }
IInterface:
public interface IInterface { // Nothing in here, keep moving }
要放置類型約束的類:
public class WorldPieceGenerator<T> where T : IInterface { // Actual world piece generating code }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.