C# 使用泛型基类作为方法的参数
我有以下课程C# 使用泛型基类作为方法的参数,c#,.net,mono,derived-class,generic-type-argument,C#,.net,Mono,Derived Class,Generic Type Argument,我有以下课程 public class A<T> { } public class B<T> : A<T> { } public class C1 : B<string> { } public class C2 : B<int> { } 如果不工作,则会产生编译器错误 错误CS0246:找不到类型或命名空间名称“T”。是否缺少using指令或程序集引用?(CS0246) 我被困在这里了。为B创建一个非泛型基类是行不通的,因为那样我就无
public class A<T>
{
}
public class B<T> : A<T>
{
}
public class C1 : B<string>
{
}
public class C2 : B<int>
{
}
如果不工作,则会产生编译器错误
错误CS0246:找不到类型或命名空间名称“T”。是否缺少using指令或程序集引用?(CS0246)
我被困在这里了。为B
创建一个非泛型基类是行不通的,因为那样我就无法从a
派生。我能想到的唯一(丑陋的)解决方案是定义一个空的虚拟接口,它由B
实现。还有更优雅的方法吗?使用通用方法:
public void MyMethod<T> (B<T> x)
publicsvoidmymethod(bx)
你可以这样称呼它:
MyMethod(new B<string>());
MyMethod(new C1());
MyMethod(new C2());
MyMethod(新的B());
MyMethod(新C1());
MyMethod(新C2());
在方法上指定T
:
public void MyMethod<T>(B<T> x)
public class Foo<T>
{
public void MyMethod(B<T> x){}
}
publicsvoidmymethod(bx)
或者在包含该方法的类上:
public void MyMethod<T>(B<T> x)
public class Foo<T>
{
public void MyMethod(B<T> x){}
}
公共类Foo
{
公共无效MyMethod(Bx){}
}
在这两种情况下,您都需要在原始类上指定相同的类型约束(如果有)更改方法的签名,如下所示:
public void MyMethod<T>(B<T> x)
publicsvoidmymethod(bx)
太棒了。我知道,如果我将该方法设置为泛型,那么它会起作用,但我认为必须在显式调用时指定类型。谢谢。