C# Resharper建议只读字段,为什么?

C# Resharper建议只读字段,为什么?,c#,resharper,C#,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

这是我的课

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”方法中不会设置这些属性吗?
如果我在这里误解了什么,有人愿意解释一下。

Readonly表示您不能重新分配字段本身:

_mail = new MailMessage(); // cannot do that outside constructor
但这并不意味着不能修改对象本身的属性:

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

因此,Resharper建议是正确的-您只能在构造函数中分配字段,以便使其成为只读的
readonly

readonly意味着您无法重新分配字段本身:

_mail = new MailMessage(); // cannot do that outside constructor
但这并不意味着不能修改对象本身的属性:

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

所以Resharper建议是正确的-您只需在构造函数中分配字段,就可以使其成为只读的,这样只读的字段就可以在任何地方更改其属性?我一直认为情况并非如此,只能在构造函数中更改其属性。那么,你认为的不是真的:)@grimsan55,你应该自己设计这样的对象不可变-语言不支持开箱即用,使对象神奇地不可变。@grimsan55的优点是,你没有做过这样的“错事”。Resharper只是说,您可以更改代码以明确反映您编写的编码结构。因此,只读字段的属性可以在任何地方更改?我一直认为情况并非如此,只能在构造函数中更改其属性。那么,你认为的不是真的:)@grimsan55,你应该自己设计这样的对象不可变-语言不支持开箱即用,使对象神奇地不可变。@grimsan55的优点是,你没有做过这样的“错事”。Resharper只是说,您可以更改代码以显式地反映您所编写的编码结构。