C# Resharper建议只读字段,为什么?
这是我的课C# Resharper建议只读字段,为什么?,c#,resharper,C#,Resharper,这是我的课 public class EmailBuilder { public string Sender { get; set; } public string Receiver { get; set; } public string Subject { get; set; } public string Body { get; set; } public int SmtpServerPort { get
public class EmailBuilder
{
public string Sender { get; set; }
public string Receiver { get; set; }
public string Subject { get; set; }
public string Body { get; set; }
public int SmtpServerPort { get; set; }
public string SmtpServerAddress { get; set; }
private MailMessage _mail;
public EmailBuilder()
{
this._mail = new MailMessage();
this.SmtpServerAddress = CmsConstants.smtpServerAddress;
this.SmtpServerPort = CmsConstants.smtpServerPort;
}
public void SetEmail(string receiver, string subject, string body)
{
this._mail.To.Add(receiver);
this._mail.From = new MailAddress("noreply@noreply.se");
this._mail.Subject = subject;
this._mail.Body = body;
this._mail.Bcc.Add("noreply@noreply.se");
}
}
resharper建议将_-mail设置为只读,但这不意味着在我的“SetEmail”方法中不会设置这些属性吗?
如果我在这里误解了什么,有人愿意解释一下。Readonly表示您不能重新分配字段本身:
_mail = new MailMessage(); // cannot do that outside constructor
但这并不意味着不能修改对象本身的属性:
_mail.To = new EmailAddress("test"); // perfectly fine with readonly field.
因此,Resharper建议是正确的-您只能在构造函数中分配字段,以便使其成为只读的
readonlyreadonly意味着您无法重新分配字段本身:
_mail = new MailMessage(); // cannot do that outside constructor
但这并不意味着不能修改对象本身的属性:
_mail.To = new EmailAddress("test"); // perfectly fine with readonly field.
所以Resharper建议是正确的-您只需在构造函数中分配字段,就可以使其成为只读的,这样只读的字段就可以在任何地方更改其属性?我一直认为情况并非如此,只能在构造函数中更改其属性。那么,你认为的不是真的:)@grimsan55,你应该自己设计这样的对象不可变-语言不支持开箱即用,使对象神奇地不可变。@grimsan55的优点是,你没有做过这样的“错事”。Resharper只是说,您可以更改代码以明确反映您编写的编码结构。因此,只读字段的属性可以在任何地方更改?我一直认为情况并非如此,只能在构造函数中更改其属性。那么,你认为的不是真的:)@grimsan55,你应该自己设计这样的对象不可变-语言不支持开箱即用,使对象神奇地不可变。@grimsan55的优点是,你没有做过这样的“错事”。Resharper只是说,您可以更改代码以显式地反映您所编写的编码结构。