鉴于下面的示例,是否可以使用ClassyFoo扩展类Foo并使ClassyFoo创建的Bar实例继承自ClassyFoo,同时保持Foo创建的Bar实例仍然从Foo继承?
例如:
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()的输出是:
显示Foo
设置Foo
设置栏
情况是类Bar为Foo添加了一些配置/特化,但Classy Foo也是如此。但Bar和ClassyFoo的专业化都可以存在于同一个对象上。
我正在尝试避免使用从ClassyFoo继承的重复Bar。实际上有多个Bars但只有一个ClassyFoo,所以这将是很多重复。
答案 0 :(得分:1)
我说这是不可能的。一个类只有一个基类。
您可以将ClassyFoo和/或Bar实现为接口,并让实际的类从一个或另一个或两者继承。
根据实际的表示和代码重用,我会创建两个接口(类似处理)或一个抽象类(你可以在那里填充一堆代码)
答案 1 :(得分:1)
不确定你想要实现的是什么,但你调用Foo.Show()是指Bar的实例与ClassyFoo si无关,你无法从中得到任何东西。
答案 2 :(得分:0)
由于C#不支持多重继承,你必须使用接口,而不使用接口,你不能这样做。