[英]Using a generic base class as a parameter of a method
我有以下课程
public class A<T>
{
}
public class B<T> : A<T>
{
}
public class C1 : B<string>
{
}
public class C2 : B<int>
{
}
我想要的是,有一个方法可以采用从B<T>
派生的任何类,如C1
或C2
作为参数。 但是声明一种方法
public void MyMethod(B<T> x)
不起作用,它会产生编译器错误
错误CS0246:找不到类型或命名空间名称“T”。 您是否缺少using指令或程序集引用? (CS0246)
我很困在这里。 为B<T>
创建非泛型基类将不起作用,因为我无法从那个方式派生出A<T>
。 我能想到的唯一(丑陋)解决方案是定义一个由B<T>
“实现”的空虚拟接口。 有更优雅的方式吗?
使用通用方法:
public void MyMethod<T> (B<T> x)
你可以像这样称呼它:
MyMethod(new B<string>());
MyMethod(new C1());
MyMethod(new C2());
在方法上指定T
:
public void MyMethod<T>(B<T> x)
或者可能在包含该方法的类上:
public class Foo<T>
{
public void MyMethod(B<T> x){}
}
在这两种情况下,您都需要在原始类上指定相同的类型约束(如果有)
像这样更改方法的签名:
public void MyMethod<T>(B<T> x)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.