2012-07-23 38 views
3

我想創建一個像這樣的簽名的通用函數:void funcName<T>()其中T將被要求是我想要的某個特定接口的實現。如何做這樣的檢查?如何傳遞給實現certan接口的通用函數類類型?如何傳遞給實現certan接口的通用函數類類型?

所以我創造一些public interface IofMine {},我嘗試創建一個功能類似public static void funcName<T>() where T : IofMine { var a = new T}和可悲的是,我得到:

Error: Cannot create an instance of the variable type 'T' because it does not have the new() constraint

我該怎麼做才能讓類的類型我的功能不僅接收是我想要的界面,而且還有一個構造函數?

回答

5

爲了要求通用參數具有默認構造函數,請指定new()作爲通用約束的一部分。

public static void funcName<T>() where T : IofMine, new() 
{ 
    T a = new T(); 
} 

您只能使用這需要一個默認的(即無參數)構造函數。例如,您不能要求構造函數接受字符串參數。

2

簡單:

public void FuncName<T>(...) 
    where T : IMyInterface 
{ 
    ... 
} 

這將創建的類型參數T的約束,這樣在調用方法時所使用的任何類型必須實現IMyInterface

2

這是你如何把它聲明:

// Let's say that your function takes 
// an instance of IMyInterface as a parameter: 
void funcName<T>(T instance) where T : IMyInterface { 
    instance.SomeInterfaceMethodFromMyInterface(); 
} 

這是你如何稱呼它:

IMyInterface inst = new MyImplOfMyInterface(); 
funcName(inst); 
相關問題