給出下面的例子,是否有可能用ClassyFoo擴展Foo類,並且由ClassyFoo繼承的Bar實例繼承自ClassyFoo,同時保持由Foo創建的Bar實例仍然繼承Foo?從派生類或基類版本的類繼承C#類
例如:
class Foo
{
protected Foo()
{
Console.WriteLine("Setting up Foo");
}
public static void Show()
{
Console.WriteLine("Showing Foo");
var bar = new Bar();
}
}
class ClassyFoo : Foo
{
public ClassyFoo() : base()
{
Console.WriteLine("Setting up Classy Foo");
}
public new static void Show()
{
Console.WriteLine("Showing Classy Foo");
var bar = new Bar();
}
}
class Bar: Foo
{
public Bar() : base()
{
Console.WriteLine("Setting up Bar");
}
}
ClassyFoo.Show的期望的輸出()是:
顯示優等的Foo
設置的Foo
設置優等的Foo
設置酒吧
而Foo.Show的輸出()是:
顯示美孚
設立富
設置酒吧
的情況Bar類增加了一些配置/專業化美孚,但優雅的Foo也是如此。但Bar和ClassyFoo的專業化可以存在於同一個對象上。
我試圖避免從ClassyFoo繼承重複酒吧。實際上有多個酒吧,但只有一個ClassyFoo,所以這將是很多重複。
實例不會從類繼承,實例是從其他類繼承的類的實例。你有'Bar:Foo',所有'Bar'實例都是如此。聽起來像你可能需要另一個子類,'ClassyBar'。 – Blorgbeard
也許看一看在C#創建一個混合的這種方法:http://www.zorched.net/2008/01/03/implementing-mixins-with-c-extension-methods/ – gideon