在抽象方法中使用继承的接口

Using inherited interface in abstract method

这是我的 C# 代码示例:

abstract class A {
    public interface IA{

    }

    abstract protected void Print(IA obj);
}

abstract class B : A {
    public interface IB : IA{

    }

    override protected void Print(IB obj){
      // do something else
    }
}

显然,编译器对我覆盖 class B 的 Print 方法并不疯狂。

我得到 "no suitable method found to override."

有没有办法让它工作?我不是在寻找设计更改,而是在寻找技术解决方案。

您无法在重写方法签名时更改它,这就是您通过将参数类型从 IA 更改为 IB 所做的。

幸运的是,您可以使用泛型来解决这个问题:

public interface IA{

}

public interface IB : IA{

}

abstract class A<T> where T : IA 
{
    abstract protected void Print(T obj);
}

abstract class B : A<IB> {

    override protected void Print(IB obj){
      // do something else
    }
}

这是一个非常奇怪的设计,但您可以通过以下方式实现:

   abstract class A {
    public interface IA{

    }

    abstract protected void Print(IA obj);
}

abstract class B : A {
    public interface IB : IA{

    }

    override protected void Print(IA obj){
    }

    protected void Print(IB obj){
      Print(obj as IA);
    }
}