存在一个接口:IFooable
public interface IFooable
{
void Foo();
}
存在一个类A,接了IFooable接口:
public class A : IFooable
{
public void Foo()
{
// 方法的具体实现
Console.WriteLine("Foo method in class A");
}
}
存在一个类B,引用了A:
public class B : A
{
// 类 B 可以选择覆盖类 A 的 Foo 方法,也可以不覆盖
public new void Foo()
{
// 方法的具体实现
Console.WriteLine("Foo method in class B");
}
}
这是主程序:
public class Program
{
public static void Main()
{
// 实例化 A 并调用 Foo 方法
IFooable fooableA = new A();
fooableA.Foo(); // 输出: Foo method in class A
// 实例化 B 并调用 Foo 方法
B b = new B();
b.Foo(); // 输出: Foo method in class B
// 将 B 的实例作为 A 类型对待,并调用 Foo 方法
A aAsB = new B();
aAsB.Foo(); // 输出: Foo method in class A
// 将 B 的实例作为 IFooable 类型对待,并调用 Foo 方法
IFooable fooableB = new B();
fooableB.Foo(); // 输出: Foo method in class A
}
}
注意!当代码写法为:
IFooable xxx = new B();
xxx.Foo(); // 输出: Foo method in class A
时,xxx.Foo()调用的是A之中的方法,而不是B之中的方法!!
解决办法:
将类B接上IFooable接口即可解决
public class B : A, IFooable
{
// 类 B 可以选择覆盖类 A 的 Foo 方法,也可以不覆盖
public new void Foo()
{
// 方法的具体实现
Console.WriteLine("Foo method in class B");
}
}