2017-09-22 158 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