2010-11-19 204 views

回答

6

静态方式共享,它是不可继承的。你无法做到这一点。

-1

您将无法通过继承完成此操作。尝试使用Composite Pattern

在其中,你有几个实现和接口的对象,并且将被静态类“组成”,并将其作为其成员。好处是您可以将行为添加到实现您的接口的每个新类中,并且在运行时可以互换。

编辑:

public class Foo 
    { 
     protected static class StaticClass 
     { 
      public static int Count { get; set; } 
     } 

     public virtual string GetBars() 
     { 
      return "I am Foo: " + StaticClass.Count++; 
     } 
    } 

    public class FooToo:Foo 
    { 
     public override string GetBars() 
     { 
      return "I am Foo Too: " + StaticClass.Count++; 
     } 
    } 

然后...

Foo foo = new Foo(); 
Foo fooToo = new FooToo(); 

Console.WriteLine(foo.GetBars()); 
Console.WriteLine(fooToo.GetBars()); 
+0

你不能使用静态类作为成员的类型,你根本就不能实例化它。它是抽象的。 – 2010-11-19 02:46:48

+0

@Ben。我应该更清楚。我打算建议的不是一个静态属性,而是一个非静态类型的实例属性,它实现了一个接口并包含共享行为的静态成员。然后,您可以从该类继承来添加行为。没有任何公开静态的东西。这不行吗? – Laramie 2010-11-22 19:22:21

0

这是不可能从一个静态类继承,它们是密封和静态方法不能是虚拟的。

我认为你需要重新考虑你的设计,你可以考虑使用单例模式而不是静态类,那么你将能够继承没有问题。

或者只是使用一个静态成员加入两个类:

静态类甲 { 静态B B; }