我有一個類似這樣的問題:Can I have a base class where each derived class has its own copy of a static property?,但那裏的答案對我來說似乎沒有定論。如何在派生類時更改常量或靜態變量的值?
基本上,我有一個類有一個常量屬性,我想派生一個類具有所有相同的方法,但爲變量使用不同的值。舉個簡單的比喻,想象我有一個類,它看起來在某種程度上,這樣的:
public class Triangle
{
public const NumSides = 3;
int sideLength;
public int Perimeter()
{
return NumSides * sideLength;
}
}
,現在我想做一個Square類,這是完全一樣的三角班,除了即numSides現在4。
換句話說,我希望有一個類,現在看起來,其全部是這樣的:
public class Square : Triangle
{
public const NumSides = 4;
}
但仍然可以訪問三角類的所有方法。 (如果有必要,我可以處理寫一個新的構造函數,但我不想從原始類複製十幾種方法,它們都應該表現得完全一樣,但是NumSides現在有一個值4.)
我不知道如何做到這一點,無論是NumSides是一個常量或作爲一個靜態屬性只有一個get函數。如果我嘗試覆蓋常量,則會得到「修飾符'覆蓋'對此項無效。」當我嘗試重寫靜態屬性版本時,我得到的消息等價於「一個靜態成員Triangle.NumSides不能被標記爲重寫,虛擬或抽象。」
而且,是的,我已經嘗試創建一個Shape類,將所有功能放在那裏,然後讓Triangle和Square從該類繼承。雖然我遇到了與NumSides相同的問題。如何在派生一個新類時更改常量或靜態變量/屬性的有效值?
正方形是一種三角形?我認爲我的腦袋有點爆炸。 –