我有一系列不同類的繼承樹。這些類中的每一個都有一些我需要時常訪問的靜態屬性。有時候我需要一個特定類的屬性,有時我需要某個多態實例最終發生的特定類的屬性。可以通過實例和類訪問的可覆蓋屬性
這可能比較容易,比如Java(我認爲)。只需製作一堆靜態字段(可以重寫這些字段嗎?我不確定)。但是在C#中,非靜態字段只能通過實例(自然地)訪問,而靜態字段只能通過它們相應的類訪問(非自然地)。
而且,您不能「超載」,呃,靜態。如果某個類具有靜態和非靜態Foo
,則執行instance.Foo
將失敗,因爲編譯器不清楚哪個Foo
指的是即使不可能指向靜態,因爲它不允許。
好的,我會提供一些代碼。說我有這樣的:
class Base
{
public static readonly string Property = "Base";
}
class Child1 : Base
{
public static readonly new string Property = "Child 1";
}
class Child2 : Base
{
public static readonly new string Property = "Child 2";
}
,然後某處:
public void SomeMethod(Base instance)
{
System.Console.WriteLine(instance.Property); // This doesn't work.
}
而且別的地方:
public void SomeOtherMethod()
{
System.Console.WriteLine(Child2.Property);
}
我想類似的東西,實際工作。
這個問題還不清楚。也許你應該張貼一些代碼來顯示你想要做的事情。如果你願意,你可以用Java來做這件事。 Java對「靜態」的含義有不同的看法,包括一種根本不是靜態的靜態(與嵌套類相關)。 – 2014-10-17 23:41:14
@彼得好了,完成了。不是Java,因爲我不是Java程序員。 – 2014-10-17 23:54:54