2013-02-01 54 views
0

给出下面的例子,是否有可能用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,所以这将是很多重复。

+0

实例不会从类继承,实例是从其他类继承的类的实例。你有'Bar:Foo',所有'Bar'实例都是如此。听起来像你可能需要另一个子类,'ClassyBar'。 – Blorgbeard

+0

也许看一看在C#创建一个混合的这种方法:http://www.zorched.net/2008/01/03/implementing-mixins-with-c-extension-methods/ – gideon

回答

1

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

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

根据实际的陈述和代码重用我会想办法让这两个接口(类似处理)或一个抽象类(你可以的东西在里面一堆代码)

0

为C#不支持你的多重继承必须使用界面,而不使用界面,你不能这样做。

1

不知道你想什么来实现,但你打电话Foo.Show()是闯民宅酒吧的实例有无关ClassyFoo SI在没有办法,你可以期待有什么。