C#:使用类泛型参数覆盖泛型方法

Zok*_*oka 4 c# generics

为什么这不可能?

abstract class A
{
    public abstract T f<T>();
}

class B<T> : A
{
    public override T f()
    {
        return default (T);
    }
}
Run Code Online (Sandbox Code Playgroud)

错误:

does not implement inherited abstract member 'A.f<T>()'
no suitable method found to override
Run Code Online (Sandbox Code Playgroud)

我知道签名必须是相同的,但从我的角度来看,我认为没有理由这是不允许的.另外我知道另一个解决方案是制作A通用的,而不是它的方法,但由于某些原因它不适合我.

Raf*_*fal 5

这是不可能的,因为这些方法具有不同的签名.A.f是泛型方法而B.f不是(它只使用类泛型参数).

你可以从调用者的角度看这个形式:

A variableA = new A();
variableA.f<int>();

B<int> variableB = new B<int>();
variableB.f();
Run Code Online (Sandbox Code Playgroud)