2016-08-04 60 views
2

我不断发现自己需要一个必须在方法范围之外声明的常量,但只能在该方法内分配一个值。结果是我必须在分配一个值之前对方法中的值进行空值检查,但是在那一点上我不能使常量保持不变。C#常量属性,只能设置一次

是否有一个本机C#修饰符可以处理这个问题?如果不是,它是否存在类似的语言?为什么它不存在于C#中?

有几分相似的帖子在这里:Is there a way of setting a property once only in C#

但它主要侧重于与getter和setter

+0

听起来像是你想要一个['只读'](https://msdn.microsoft.com/en-us/library/acdd6hb7.aspx)属性 –

+0

看看'readonly'。限制是你只能在构造函数中为它赋值。 – Kapol

+0

在方法级别上这是不可能的(在C#中)。只有在课堂上,你才能做到这一点。 –

回答

0

它是不可能有一个只能在方法内部设置一个类字段为空检查您指定的方法。

但是,您可以限制只能在构造函数中设置的字段。关键字为readonly

5

当您要懒惰地初始化一个值时,请使用Lazy实例。这允许您在构造函数中设置Lazy实例,这意味着该字段可以是readonly,但可确保创建该对象的方法在需要之前不会被调用,并且只能初始化该值一次。

+0

除非有人再次使用'new'关键字。 – user3185569

+1

@ user3185569这仍然没有再次初始化该字段。这只是创建一个新的实例,这正是您希望在“只读”字段中发生的事情。它可以为每个实例设置一次,而不是每个应用程序一次。如果你需要后者,你只需要使它成为“静态”。 – Servy