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しかし、それはオブジェクトのプロパティ自体を変更することはできませんを意味するものではありません。
したがって、読み取り専用のフィールドのプロパティはいつでも変更できますか?私はいつもそうではなかったと思っていて、コンストラクタ内でプロパティが変更されるだけでした。 – grimsan55
あなたが考えていたことは、それほど真実ではない:) – Evk
@ grimsan55そして、あなたはこのようなオブジェクトを自分自身で設計するべきです - 言語はオブジェクトを魔法のように不変にするためのサポートはありません。 – Evk