考虑下面的类:C#多态性与方法继承
public class X {};
public class Y : X {};
public class Z : X {};
public class A {
public bool foo (X bar) {
return false;
}
};
public class B : A {
public bool foo (Y bar) {
return true;
}
};
public class C : A {
public bool foo (Z bar) {
return true;
}
};
有没有办法实现以下所需的输出?
A obj1 = new B();
A obj2 = new C();
obj1.foo(new Y()); // This should run class B's implementation and return true
obj1.foo(new Z()); // This should default to class A's implementation and return false
obj2.foo(new Y()); // This should default to class A's implementation and return false
obj2.foo(new Z()); // This should run class C's implementation and return true
我遇到的问题是,不管传递的参数如何,都会调用类A的实现。
有没有办法说,将'obj1'转换为'B'类型以获得所需的行为? –
@DanBrenner当然:'((B)obj1).foo(new Y());'应该根据需要返回'true'。但我需要一些“糖”。 – Artyom