调用嵌套的私有构造函数
本文关键字:构造函数 嵌套 调用 | 更新日期: 2023-09-27 18:15:35
如何在公共构造函数中调用私有构造函数?我想公开调用from setter和from setter调用对象的初始化器。
private MyMailer() // objects initializer
{
client = new SmtpClient(SMTPServer);
message = new MailMessage {IsBodyHtml = true};
}
private MyMailer(string from) //from setter
{
SetFrom(from);
}
public MyMailer(string from, string to, string cc, string bcc, string subject, string content)
{
foreach (string chunk in to.Split(new string[] {";"}, StringSplitOptions.RemoveEmptyEntries))
{
AddTo(chunk);
}
foreach (string chunk in cc.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries))
{
AddCC(chunk);
}
foreach (string chunk in bcc.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries))
{
AddBCC(chunk);
}
SetSubject(subject);
SetMessage(content);
Send();
}
作为构造函数链的替代方法:
如果您希望所有构造函数初始化client
和message
,您应该将初始化从默认构造函数移动到定义私有字段的位置,如下所示:
private readonly SmtpClient client = new SmtpClient(SMTPServer);
private readonly MailMessage message = new MailMessage {IsBodyHtml = true};
这样就可以保证它们将被您编写的任何构造函数初始化。我想你也可以把它们设为只读。
注意:这将只工作,如果SMTPServer
在构造时初始化,例如,如果它是一个属性,它返回的值不依赖于其他字段。否则,您可能需要为它使用另一个字段,该字段与其他两个字段一样同时声明和初始化。
像这样的字段是按照它们在类定义中出现的顺序初始化的(这显然是非常重要的)。
您可以使用以下语法来调用另一个构造函数,这是。net的特性:
private MyMailer() // objects initializer
{
client = new SmtpClient(SMTPServer);
message = new MailMessage {IsBodyHtml = true};
}
private MyMailer(string from) //from setter
: this() // calls MyMailer()
{
SetFrom(from);
}
public MyMailer(string from, string to, string cc, string bcc, string subject, string content)
: this(from) // calls MyMailer(from)
{
foreach (string chunk in to.Split(new string[] {";"}, StringSplitOptions.RemoveEmptyEntries))
{
AddTo(chunk);
}
foreach (string chunk in cc.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries))
{
AddCC(chunk);
}
foreach (string chunk in bcc.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries))
{
AddBCC(chunk);
}
SetSubject(subject);
SetMessage(content);
Send();
}