我尝试使用模板方法(foo1)中的方法(foo2),编译器说他不知道属于该类(T)的这个方法(foo2)。
什么是正确的语法,哪个编译器接受它?
private void foo1<T>(T instance)
{
instance.foo2();
}
我尝试使用模板方法(foo1)中的方法(foo2),编译器说他不知道属于该类(T)的这个方法(foo2)。
什么是正确的语法,哪个编译器接受它?
private void foo1<T>(T instance)
{
instance.foo2();
}
您应该像下面的代码片段一样对泛型类型创建约束:
private void foo1<T>(T instance) where T : IFoo
{
instance.foo2();
}
interface IFoo
{
void foo2();
}
其中定义,封闭的泛型类型只能从IFoo
接口派生。但是你为什么不坚持使用下面给出的非通用版本呢?
private void foo1(IFoo instance)
{
instance.foo2();
}
interface IFoo
{
void foo2();
}
您正在使用对泛型类型没有任何约束的泛型方法。
这意味着它可以是任何对象。编译器抱怨是因为大多数对象没有foo2
方法。
foo2()
如果您希望能够在泛型参数上调用该方法,则需要将泛型类型约束为具有方法的类型。
或者,不要使用泛型,而是传入已foo2
定义的抽象类型。