2016-05-12 61 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