如何在C#中调用泛型重载方法

时间:2016-03-10 06:29:03

标签: c# generics overloading

不熟悉C#和泛型,所以我可能会遗漏一些明显的东西,但是:

假设:

public interface IA { }

public interface IB
{  void DoIt( IA x );
}

public class Foo<T> : IB where T : IA
{
    public void DoIt( IA x )
    {  DoIt(x); // Want to call DoIt( T y ) here
    }

    void DoIt( T y )
    {  // Implementation
    }
}

1)为什么方法void DoIt(T y)不满足接口DoIt所需的IB方法实现?

2)如何在DoIt(T y)内致电DoIt( IA x )

1 个答案:

答案 0 :(得分:3)

1)因为任何T IA(这是从约束中提供的),但不是每个IA 都是 { {1}}:

T

2)如果你确定class A : IA {} class B : IA {} var foo_b = new Foo<B>(); var a = new A(); // from the point of IB.DoIt(IA), this is legal; // from the point of Foo<B>.DoIt(B y), passed argument is not B foo_b.DoIt(a); x,那么使用演员:

T

如果public void DoIt( IA x ) { DoIt((T)x); } 可以是任何内容,并且x可以是可选的,请使用DoIt(T)

as

否则,您可以抛出异常或考虑其他方法,具体取决于具体的用例。