2016-05-12 8 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」方式でのことをするようにすることはないだろうこと? 私はここで何かを誤解しているかどうか誰かが説明します。あなただけのフィールドを割り当てる -

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

ので、ReSharperの提案は正しいです:

​​3210

しかし、それはオブジェクトのプロパティ自体を変更することはできませんを意味するものではありません。

答えて

4

読み取り専用を使用すると、フィールド自体を再割り当てすることができないことを意味しますコンストラクタではreadonlyとすることができます。

+0

したがって、読み取り専用のフィールドのプロパティはいつでも変更できますか?私はいつもそうではなかったと思っていて、コンストラクタ内でプロパティが変更されるだけでした。 – grimsan55

+1

あなたが考えていたことは、それほど真実ではない:) – Evk

+0

@ grimsan55そして、あなたはこのようなオブジェクトを自分自身で設計するべきです - 言語はオブジェクトを魔法のように不変にするためのサポートはありません。 – Evk

関連する問題