在下面的代码我定义一个接口,一个抽象基类与打印“foo”的方法,同时实现的一类,以及与等于的方法的签名的接口上的扩展方法在打印“bar”的抽象基类中。当我运行这个样本,为什么是“巴”字样,而不是“富”?如果适用,这种语言设计选择背后的士气是什么?扩展方法中重写继承的方法
public interface ISomething
{}
public abstract class SomethingElse
{
public void foo()
{
Console.WriteLine("foo");
}
}
public class DefinitelySomething : SomethingElse, ISomething
{}
public static class ISomethingExtensions
{
public static void foo(this ISomething graphic)
{
Console.WriteLine("bar");
}
}
class Program
{
static void Main(string[] args)
{
ISomething g = new DefinitelySomething();
g.foo();
}
}
我接受这个答案,因为对我来说这是解释继承和扩展方法在这个问题背后的最理解的答案。 – mtijn