2016-05-12 63 views
0

这是我的课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; 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("[email protected]"); 
      this._mail.Subject = subject; 
      this._mail.Body = body; 
      this._mail.Bcc.Add("[email protected]"); 
     } 
} 

ReSharper的是表明_mail要只读做,但不会使让我就为“setEmail”方法,这些属性将不会设置? 有人会在这里解释我是否误解了某些东西。

回答

4

只读意味着你不能重新分配领域本身:

​​3210

但是,这并不意味着对象的属性本身不能被修改:

_mail.To = new EmailAddress("test"); // perfectly fine with readonly field. 

所以ReSharper的建议是正确的 - 你只分配你的领域在构造函数中,所以它可以做成readonly

+0

所以只读字段可以在任何地方改变其属性?我一直认为情况并非如此,只能在构造函数中更改其属性。 – grimsan55

+1

那么你认为是不是真的然后:) – Evk

+0

@ grimsan55你应该设计这样的对象不可改变自己 - 语言没有支持开箱即可使对象神奇不变。 – Evk