2016-09-14 26 views

回答

5

這不是編譯器支持的東西,因爲它不需要爲所有屬性指定一些東西。你可能爲寫一個分析器,但在非平凡的情況下,它會很快成爲「停止問題」複雜。

注意,如果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; 
    } 
} 
+0

這從根本上改變我怎麼看班,那些東西,只是「點擊」喜歡好了,現在我明白了它的一個。代碼示例確實幫了很大忙。謝謝! – Skedge

+0

我唯一需要澄清的其他事情是,構造函數是否在屬性中使用setter? – Skedge

+0

@Skedge只有在聲明該類的新實例時纔會調用該構造函數。它從未再被調用過。 – ThePerplexedOne

1

傑森給出您的問題一個很好的選擇。https://stackoverflow.com/a/10720455/3836632

「我認爲,你的配置參數應該(通過屬性,可以說是private,但訪問)是readonly然後,設置警示標記爲錯誤,然後。 ,當你失敗時初始化這些變量中的一個,你會得到一個編譯時錯誤

領域CalculatorConfig.param1永遠不會分配給,永遠有它的默認值。

現在你已經在編譯時遇到了這個問題。「

0
  • 列表項

您可以設置需要在以初始化屬性構造函數的參數。這樣你可以強制用戶在創建對象時傳遞值。

公共類汽車 { 公共汽車(串色,布爾fourDoor,整數numberOfTires) { this.Color =顏色; this.FourDoor = fourDoor; 這個。NumberOfTires = numberOfTires; }

public string Color { get; set; } 
    public bool FourDoor { get; set; } 
    public int NumberOfTires { get; set; } 
} 
相關問題