可以說我有一類確保一類的所有新實例,可以實現所有的字段或屬性
class Car
{
string color;
bool fourDoor;
int numberOfTires;
}
我創建一個新的實例
Car myCar = new Car();
myCar.color = "green";
myCar.fourDoor = true;
我還沒有分配任何東西numberOfTires
那麼我如何讓它發出編譯警告/錯誤?
可以說我有一類確保一類的所有新實例,可以實現所有的字段或屬性
class Car
{
string color;
bool fourDoor;
int numberOfTires;
}
我創建一個新的實例
Car myCar = new Car();
myCar.color = "green";
myCar.fourDoor = true;
我還沒有分配任何東西numberOfTires
那麼我如何讓它發出編譯警告/錯誤?
這不是編譯器支持的東西,因爲它不需要爲所有屬性指定一些東西。你可能爲寫一個分析器,但在非平凡的情況下,它會很快成爲「停止問題」複雜。
注意,如果Car
是一個struct
那麼可以可以通過一個非常具體的語法檢查(如果只有不首先初始化值),但是:就是這麼微妙的,它不會幫你,這不是一個好的建議(而且在我們討論可變結構的問題之前)。
在你的情況下,你最好的選擇是使用構造函數來聲明你需要的東西。然後它變成:
Car myCar = new Car(color: "green", fourDoor: true, numberOfTires: 42);
我明確的參數名稱純粹是爲了知名度;它的工作一樣好:
Car myCar = new Car("green", true, 42);
這將映射到這樣的:
class Car
{
public string Color {get;}
public bool FourDoor {get;}
public int NumberOfTires {get;}
public Car(string color, bool fourDoor, int numberOfTires)
{
Color = color;
FourDoor = fourDoor;
NumberOfTires = numberOfTires;
}
}
對於這種情況,您應該使用帶參數的構造函數。看看這裏:https://msdn.microsoft.com/en-us/library/k6sa6h87.aspx。
傑森給出您的問題一個很好的選擇。https://stackoverflow.com/a/10720455/3836632
「我認爲,你的配置參數應該(通過屬性,可以說是private
,但訪問)是readonly
然後,設置警示標記爲錯誤,然後。 ,當你失敗時初始化這些變量中的一個,你會得到一個編譯時錯誤
領域
CalculatorConfig.param1
永遠不會分配給,永遠有它的默認值。
現在你已經在編譯時遇到了這個問題。「
您可以設置需要在以初始化屬性構造函數的參數。這樣你可以強制用戶在創建對象時傳遞值。
公共類汽車 { 公共汽車(串色,布爾fourDoor,整數numberOfTires) { this.Color =顏色; this.FourDoor = fourDoor; 這個。NumberOfTires = numberOfTires; }
public string Color { get; set; }
public bool FourDoor { get; set; }
public int NumberOfTires { get; set; }
}
這從根本上改變我怎麼看班,那些東西,只是「點擊」喜歡好了,現在我明白了它的一個。代碼示例確實幫了很大忙。謝謝! – Skedge
我唯一需要澄清的其他事情是,構造函數是否在屬性中使用setter? – Skedge
@Skedge只有在聲明該類的新實例時纔會調用該構造函數。它從未再被調用過。 – ThePerplexedOne