用泛型实现继承的抽象成员

Mik*_*keb 0 c# generics polymorphism inheritance

说我上课了:

abstract class A<T> {
    public abstract void foo(T a);
}

class B : A<int> {
    public void foo(int a) {              //ERROR, signature is not correct
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下如何实现基类?参数的类型应为int.

Eri*_*ert 6

正如其他人所指出的那样,您缺少override关键字.

但是,我想提醒您对这种模式要非常小心.如果你不小心,你可以让自己陷入一个受伤的世界:

class B<T>
{
  public virtual void M(T t) {}
  public virtual void M(int x) {}
}
class D : B<int>
{
  public override void M(int x) {}
}
Run Code Online (Sandbox Code Playgroud)

它覆盖了哪一个?

这种情况没有任何好处.CLR规范建议您永远不要陷入两种方法签名在通用构造下统一的情况.好的建议,那.