在C#中调用模板中的方法

pt1*_*lol 2 c#

我尝试使用模板方法(foo1)中的方法(foo2),编译器说他不知道属于那个类(T)的这个方法(foo2).

什么是正确的语法,哪个编译器接受它?

private void foo1<T>(T instance)
{
    instance.foo2();
}
Run Code Online (Sandbox Code Playgroud)

Ily*_*nov 8

您应该在泛型类型上创建约束,如下面的代码片段所示:

private void foo1<T>(T instance) where T : IFoo
{ 
    instance.foo2(); 
}

interface IFoo
{
    void foo2();
}
Run Code Online (Sandbox Code Playgroud)

其中定义了封闭的泛型类型只能从IFoo接口派生.但是你为什么不坚持下面给出的非通用版本呢?

private void foo1(IFoo instance) 
{ 
    instance.foo2(); 
}

interface IFoo
{
    void foo2();
}
Run Code Online (Sandbox Code Playgroud)