我有一個靜態類,我想從另一個靜態類繼承,但是編譯器禁止這樣做。 「靜態類必須從對象派生」
我想知道爲什麼並且有任何解決方法?
我有一個靜態類,我想從另一個靜態類繼承,但是編譯器禁止這樣做。 「靜態類必須從對象派生」
我想知道爲什麼並且有任何解決方法?
靜態方式共享,它是不可繼承的。你無法做到這一點。
您將無法通過繼承完成此操作。嘗試使用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());
這是不可能從一個靜態類繼承,它們是密封和靜態方法不能是虛擬的。
我認爲你需要重新考慮你的設計,你可以考慮使用單例模式而不是靜態類,那麼你將能夠繼承沒有問題。
或者只是使用一個靜態成員加入兩個類:
靜態類甲 { 靜態B B; }
你不能使用靜態類作爲成員的類型,你根本就不能實例化它。它是抽象的。 – 2010-11-19 02:46:48
@Ben。我應該更清楚。我打算建議的不是一個靜態屬性,而是一個非靜態類型的實例屬性,它實現了一個接口幷包含共享行爲的靜態成員。然後,您可以從該類繼承來添加行爲。沒有任何公開靜態的東西。這不行嗎? – Laramie 2010-11-22 19:22:21