这是我在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
}
}
显然,编译器对我覆盖B类的Print方法并不感到疯狂。
我收到“找不到合适的方法来覆盖。”
有没有办法使它起作用?我不是在寻求设计更改,而是在寻求技术解决方案。
答案 0 :(得分:1)
您不能在覆盖方法签名时更改方法签名,这就是通过将参数类型从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
}
}
答案 1 :(得分:0)
这是很奇怪的设计,但是您可以通过以下方式实现:
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);
}
}