Resharper 提示只读字段,为什么?
Resharper suggesting readonly field, why?
这是我的class
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" 方法中不设置这些属性吗?
如果我在这里误解了什么,有人愿意解释一下。
只读表示您不能重新分配字段本身:
_mail = new MailMessage(); // cannot do that outside constructor
但这并不意味着不能修改对象本身的属性:
_mail.To = new EmailAddress("test"); // perfectly fine with readonly field.
因此 Resharper 的建议是正确的 - 您只需在构造函数中分配您的字段,这样就可以创建 readonly
。
这是我的class
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" 方法中不设置这些属性吗? 如果我在这里误解了什么,有人愿意解释一下。
只读表示您不能重新分配字段本身:
_mail = new MailMessage(); // cannot do that outside constructor
但这并不意味着不能修改对象本身的属性:
_mail.To = new EmailAddress("test"); // perfectly fine with readonly field.
因此 Resharper 的建议是正确的 - 您只需在构造函数中分配您的字段,这样就可以创建 readonly
。