繁体   English   中英

C#类继承自派生类或基类的类

[英]C# class inherrit from derived or base version of class

鉴于下面的示例,是否可以使用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
设置Classy Foo
设置吧

而Foo.Show()的输出是:

显示Foo
设置Foo
设置吧

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

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

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

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

根据实际的表示和代码重用,我会创建两个接口(类似处理)或一个抽象类(你可以在那里填充一堆代码)

不知道你想要实现什么,但你调用Foo.Show()是指Bar的实例与ClassyFoo si无关,你无法从中得到任何东西。

由于C#不支持多重继承,你必须使用接口,而不使用接口,你不能这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM