我之前从未使用过流畅的代码风格.所以这是我第一次尝试使用C#属性声明以流畅的方式开发一些东西,但是我收到了一个错误.谁能帮我?
public class MailTemplate
{
string _MailBody = "";
public MailTemplate MailBody
{
get { return _MailBody; }
set { _MailBody = value ; }
}
string _Subject = "";
public MailTemplate Subject
{
get { return _Subject; }
set { _Subject = value; }
}
string _MailFrom = "";
public MailTemplate MailFrom
{
get { return _MailFrom; }
set { _MailFrom = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
请帮助我如何分配或初始化邮件正文,以后也可以阅读相同的属性名称.我认为一个属性不能用于流畅的风格开发.这里需要一些亮点.
MailTemplate该类的流畅构建器界面如下所示:
public class MailTemplateBuilder
{
string _body;
string _subject;
string _sender;
public MailTemplateBuilder WithBody(string body)
{
_body = body;
return this;
}
public MailTemplateBuilder WithSubject(string subject)
{
_subject = subject;
return this;
}
public MailTemplateBuilder WithSender(string sender)
{
_sender = sender;
return this;
}
public MailTemplate Build()
{
return new MailTemplate(_sender, _subject, _body);
}
}
Run Code Online (Sandbox Code Playgroud)
用法如下所示:
var template = _builder.WithBody("body")
.WithSubject("subject")
.WithSender("sender")
.Build();
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用扩展方法:
public static class MailTemplateBuilder
{
public static MailTemplate WithBody(this MailTemplate item, string body)
{
item.MailBody = body;
return item;
}
public static MailTemplate WithSubject(this MailTemplate item, string subject)
{
item.MailSubject = subject;
return item;
}
public static MailTemplate WithSender(this MailTemplate item, string sender)
{
item.MailFrom = sender;
return item;
}
}
Run Code Online (Sandbox Code Playgroud)
用法现在看起来像这样:
var template = new MailTemplate().WithBody("body")
.WithSubject("subject")
.WithSender("sender");
Run Code Online (Sandbox Code Playgroud)
请注意:
在这两种情况下,MailTemplate该类都不会受到此流畅界面的代码的污染.这将是一个简单的类:
public class MailTemplate
{
string _mailBody = "";
string _subject = "";
string _mailFrom = "";
public string MailBody
{
get { return _mailBody; }
set { _mailBody = value ; }
}
public string Subject
{
get { return _subject; }
set { _subject = value; }
}
public string MailFrom
{
get { return _mailFrom; }
set { _mailFrom = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
因此,在使用任何一个提供的流畅接口创建该实例后,您只需通过访问属性来读取值:
var body = template.MailBody;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1855 次 |
| 最近记录: |