在第一个示例中,您将在静态构造函数中对其进行更改,如果您在其他任何静态方法/属性中对其进行了更改,则会出现编译器错误。
在第二个示例中,您试图在非静态构造函数中更改static readonly
成员,这是不允许的。
您只能在static
构造函数中更改static readonly
成员。这样想,static
构造函数会运行一次,然后为每个实例调用实例构造函数。如果每个实例都可以更改它,该属性将不是readonly
。
你可以,当然,在构造改变非static
readonly
实例成员:
public static readonly bool MaximumRecipientsReached = false;
public readonly bool MyInstanceReadonly = false;
static AdditionalRecipient()
{
// static readonly can only be altered in static constructor
MaximumRecipientsReached = true;
}
public AdditionalRecipient()
{
// instance readonly can be altered in instance constructor
MyInstanceReadonly = true;
}
而且,我对你们的困惑“PS:当然我使用的属性”。属性不能被声明为readonly
,如果你想要这些是属性并且是readonly
-ish,那么你需要使它们成为private set
- 除非你使用的是后台字段。我提出的主要原因是因为使用具有私有集合的属性将允许您执行代码尝试执行的操作,因为类本身可以在任何方法或构造函数中更改属性(静态或实例),但代码课外不能。
// public getters, private setters...
public static bool MaximumRecipientsReached { get; private set; }
public static IList<EmailAddress> Contacts { get; private set; }
你得到的错误信息是什么? – Servy 2012-07-05 13:48:47