我想打電話給一個定義類似的方法如下(簡化,以避免混淆):通用多約束
public static void Register<T>(T value) where T : BaseClass, IInterface
這工作得很好,只要我有一個類實例定義了這些價值。當我將一個`BaseClass'傳入一個方法然後嘗試在上面的聲明中使用該實例時,就會出現這個問題。例如:
public class MyClass
{
public MyClass(BaseClass value)
{
Register(value);
}
}
我可以通過並同時實現BaseClass的和IInterface到構造函數的類的實例,但是,當我嘗試使用該值在Register
方法我得到一個編譯錯誤,指出:
類型'BaseClass'不能用作通用類型或方法'Register(T)'中的類型參數'T'。沒有從'BaseClass'到'IInterface'的隱式引用轉換。
如果我更改類型在構造函數中,像這樣:
public class MyClass
{
public MyClass(IInterface value)
{
Register(value);
}
}
我得到一個錯誤,指出:
類型「IInterface」不能用作類型參數「T」在通用類型或方法'Register(T)'中。沒有從'IInterface'到'BaseClass'的隱式引用轉換。
這看起來有點像22。 有沒有一種方法可以定義參數來表明它必須實現BaseClass和IInterface?
這是我最初嘗試去的路徑。很高興知道這是一條艱難的道路,我有一個更容易達到的路徑。 –