0

鉴于下面的示例,是否可以使用 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() 的期望输出是:

显示 Classy Foo
设置 Foo
设置 Classy Foo
设置 Bar

Foo.Show() 的输出是:

显示 Foo
设置 Foo
设置栏

情况是类 Bar 为 Foo 添加了一些配置/专业化,但 Classy Foo 也是如此。但是 Bar 和 ClassyFoo 的特化可以存在于同一个对象上。

我试图避免有一个从 ClassyFoo 继承的重复 Bar。实际上有多个 Bars 但只有一个 ClassyFoo,所以这将是很多重复。

4

3 回答 3

1

不确定您要达到什么目标,但是您调用引用 Bar 实例的 Foo.Show() 与 ClassyFoo si 无关,您无法从那里获得任何期望。

于 2013-02-01T04:20:09.623 回答
1

我会说这是不可能的。一个类只有一个基类。

您可能能够将 ClassyFoo 和/或 Bar 实现为接口,并让实际的类从一个或另一个或两者继承。

根据实际的表示和代码重用,我将同时制作两个接口(类似的处理)或一个抽象类(你可以在那里塞满一堆代码)

于 2013-02-01T04:09:53.760 回答
0

由于 C# 不支持多重继承,因此您必须为此使用接口,如果不使用接口,您将无法做到这一点。

于 2013-02-01T04:13:54.767 回答