2017-09-22 159 views
0

我有以下的接口和類:C#泛型類型作爲參數

public abstract class A {} 
public abstract class B<T> : IType<T> 
{ 
    public T Value { get; set; } 
} 

public interface IType<T> 
{ 
    T Value { get; set; } 
} 

public class C : B<String>, IType<String> { } 
public class D : B<Int32>, IType<Int32> { } 

如何傳遞C或d作爲方法參數,而不使用A? 所以參數類型必須是IType<T>B<T>

不幸的是,我完全陌生,所以任何幫助將感激地讚賞。謝謝!

編輯

我試圖做到的,是類似如下(不會編譯)

public void SetB(B<T> Type) 
{ 
    //Do stuff... 
} 

所以我可以通過C或d該方法。

+0

你目前沒有編譯的東西,所以很難理解你想要做什麼。你可以請更新你的問題,以便你的代碼編譯,然後添加一個快速的僞代碼片段,解釋你正在嘗試做什麼? –

+0

由於'乙''是ITYPE ',是 「'乙'或'ITYPE '」 相當於是'ITYPE ',那麼什麼是錯的只是使用'ITYPE '作爲你的參數類型? – fuglede

+0

@DavidL謝謝,更新了我的問題 – Nordrassil

回答

1

您的方法也可以是generic

public void MyMethod<T>(IType<T> arg) 
{ 
    throw new NotImplementedException(); 
} 

你可以這樣稱呼它。

MyMethod(new C()); 
MyMethod(new D()); 
+0

謝謝!它就這麼簡單:) – Nordrassil

+0

@Nordrassil:請注意,您也可以調用'MyMethod (new C())'。您可以省略泛型類型參數,編譯器會試圖找出您的參數意義,但它並不總是成功。 –

+0

@EricLippert非常感謝你的有用的提示! – Nordrassil