我不斷髮現自己需要一個必須在方法範圍之外聲明的常量,但只能在該方法內分配一個值。結果是我必須在分配一個值之前對方法中的值進行空值檢查,但是在那一點上我不能使常量保持不變。C#常量屬性,只能設置一次
是否有一個本機C#修飾符可以處理這個問題?如果不是,它是否存在類似的語言?爲什麼它不存在於C#中?
有幾分相似的帖子在這裏:Is there a way of setting a property once only in C#
但它主要側重於與getter和setter
我不斷髮現自己需要一個必須在方法範圍之外聲明的常量,但只能在該方法內分配一個值。結果是我必須在分配一個值之前對方法中的值進行空值檢查,但是在那一點上我不能使常量保持不變。C#常量屬性,只能設置一次
是否有一個本機C#修飾符可以處理這個問題?如果不是,它是否存在類似的語言?爲什麼它不存在於C#中?
有幾分相似的帖子在這裏:Is there a way of setting a property once only in C#
但它主要側重於與getter和setter
它是不可能有一個只能在方法內部設置一個類字段爲空檢查您指定的方法。
但是,您可以限制只能在構造函數中設置的字段。關鍵字爲readonly
。
當您要懶惰地初始化一個值時,請使用Lazy
實例。這允許您在構造函數中設置Lazy
實例,這意味着該字段可以是readonly
,但可確保創建該對象的方法在需要之前不會被調用,並且只能初始化該值一次。
除非有人再次使用'new'關鍵字。 – user3185569
@ user3185569這仍然沒有再次初始化該字段。這只是創建一個新的實例,這正是您希望在「只讀」字段中發生的事情。它可以爲每個實例設置一次,而不是每個應用程序一次。如果你需要後者,你只需要使它成爲「靜態」。 – Servy
聽起來像是你想要一個['只讀'](https://msdn.microsoft.com/en-us/library/acdd6hb7.aspx)屬性 –
看看'readonly'。限制是你只能在構造函數中爲它賦值。 – Kapol
在方法級別上這是不可能的(在C#中)。只有在課堂上,你才能做到這一點。 –