我的代码需要设置我的类的字段,但我希望字段只设置一次。如果开发人员试图重置/更改它,我理想情况下编译器会告诉我们而不是获取运行时错误。这可能吗?
帮助解释的代码
internal class Message
{
private string title = string.Empty;
public string Title
{
get { return title; }
set
{
if (string.IsNullOrEmpty(title))
title = value;
else
throw new Exception("Title can only be set once!");
}
}
}
如您所见,上面将抛出异常,但这是运行时错误。虽然这里的示例相当简单,但编写编译器错误或警告消息的概念可能非常有用。
答案 0 :(得分:4)
您要求的是AFAIK无法实现的自定义编译器规则。 IMO你有2个选项,一个是使它成为构造函数的一部分所以它只能被设置一次,例如。
internal class Message
{
public Message(string title)
{
Title = title;
}
public string Title { get; private set; }
}
另一种是保持它的方式,但是,抛出一个更合适的例外,例如
internal class Message
{
private string title = string.Empty;
public string Title
{
get { return title; }
set
{
if (string.IsNullOrEmpty(title))
title = value;
else
throw new InvalidOperationException("Title can be set only once!");
}
}
}
无论哪种方式,Title
属性都只会被设置一次。
答案 1 :(得分:1)
只需使用readonly
字段:
private readonly string title;
public Message(string title) { this.title = title; }
编译器will emit an error,如果该字段是从其他任何地方分配的。