C#类从类的派生版本或基版本继承

C#类从类的派生版本或基版本继承,c#,C#,给出下面的示例,是否可以使用ClassyFoo扩展类Foo,并使ClassyFoo创建的Bar实例从ClassyFoo继承而来,同时保持由Foo创建的Bar实例仍然从Foo继承 例如: class Foo { protected Foo() { Console.WriteLine("Setting up Foo"); } public static void Show() {

给出下面的示例,是否可以使用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.Show()的输出为:

显示Foo
设置Foo
设置栏

情况是,类栏向Foo添加了一些配置/专门化,但classyfoo也添加了一些配置/专门化。但是Bar和ClassyFoo的专门化可以存在于同一个对象上


我试图避免使用从ClassyFoo继承的重复条。实际上,有多个条形图,但只有一个ClassyFoo,因此会有很多重复。

我认为这是不可能的。一个类正好有一个基类

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


根据实际的表示和代码重用,我会使两个接口(类似的处理)或一个接口成为抽象类(您可以在其中填充一堆代码)

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

不确定您要实现什么,但您调用引用Bar实例的Foo.Show()与ClassyFoo si毫无关系,您无法从中得到任何东西。

实例不是从类继承的,实例是从其他类继承的类的实例。您有
Bar:Foo
,因此对于
Bar
的所有实例都是如此。听起来你可能需要另一个子类,
ClassyBar
。也许可以看看这种在C#中创建Mixin的方法:是的,希望有一种方法可以修改Bar的定义,从而通过泛型或其他我不太了解的东西与Foo和ClassyFoo联系起来。但听起来好像不是。