2010-11-19 96 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; }