需要了解重载的构造函数
本文关键字:构造函数 重载 了解 | 更新日期: 2023-09-27 18:31:51
我学习 C#,我试图了解重载构造函数、它是如何工作的以及像连锁调用一样使用它们的意义?为什么只有一个具有所有必要参数的构造函数?下面我有一些帮助代码用于我正在使用的任务,我需要一些帮助来理解所有这些构造函数的重点。感谢一些帮助!谢谢!
public class Email
{
//private email
private string m_personal;
//work mail
private string m_work;
public Email()
{
}
public Email(string workMail) : this(workMail, string.Empty)
{
}
public Email(string workMail, string personalMail)
{
m_work = workMail;
m_personal = personalMail;
}
public string Personal
{
//private mail
get { return m_personal; }
set { m_personal = value; }
}
public string Work
{
get { return m_work; }
set { m_work = value; }
}
public string GetToStringItemsHeadings
{
get { return string.Format("{0,-20} {1, -20}", "Office Email", "Private Email"); }
}
public override string ToString()
{
string strOut = string.Format("{0,-20} {1, -20}", m_work, m_personal);
return strOut;
}
}
为什么只有一个具有所有必要参数的构造函数?
如果类的用户只对某些参数感兴趣怎么办?使用您的示例,如果有人没有个人电子邮件怎么办?他们应该通过null
还是string.Empty
?这种类型级知识最好由类型本身来处理。
通过仅使用工作电子邮件公开额外的构造函数,您实际上是在告诉您的类使用者"没有个人电子邮件?别担心,我会处理的"。
最重要的是,链接定义自然有助于避免代码冗余。
这与Constructors
无关。所有类型的重载函数都简化了库的使用。当我们编写一个类时,我们将把所有的复杂性封装在一个黑匣子中,这可以通过一些已知的best Practices
来实现。一个很好的例子是.NET
可以轻松使用的库(记住那些重载的函数/构造函数)。
这与对错无关,我们使用重载函数来简化使用,因此在不需要时无需传递 null 参数。
其次,我们调用具有大多数参数的函数,该函数嵌套在下一个参数较少的函数中,以减少Redundancy
。我的意思是避免在所有版本的函数中复制/粘贴相同的代码。
我认为由于该模式被广泛接受和使用,下一代.NET
将以某种方式隐藏此冗余版本,我们只需使用最多的参数编写函数。
关键是要避免重复代码,因为它将帮助您避免这种情况:
public Email(string workMail)
{
m_work = workMail;
m_personal = string.Empty;
}
public Email(string workMail, string personalMail)
{
m_work = workMail;
m_personal = personalMail;
}
考虑到您的构造函数可以做的不仅仅是分配字段。
它是如何工作的?您可以尝试,调试并学习它。我不确定,但我认为它会首先调用重载的,然后调用构造函数的代码。在您的方案中,调用电子邮件(字符串工作邮件)将调用第一个电子邮件(字符串工作邮件,字符串个人邮件)。
退房:
-
http://www.c-sharpcorner.com/UploadFile/vishnuprasad2005/HowuseCSharpConstructors11302005015338AM/HowuseCSharpConstructors.aspx
-
http://blog.degree.no/2012/03/calling-an-overloaded-constructor-from-another-constructor-c/
- http://weblogs.asp.net/scottcate/archive/2005/11/23/431412.aspx
说的是,提供第二个构造函数主要是为了方便起见,以便在没有个人邮件地址的情况下更容易使用类。然后,类的用户只需要指定工作地址,类本身将通过为该字段设置合理的默认值来处理不存在的个人地址。如果缺少该参数,则该类的用户将负责填充字符串。对于缺少个人邮件地址,为空。
构造函数作为对另一个构造函数的调用实现,以避免代码重复。它也可以写成
public Email(string workMail)
{
m_work = workMail;
m_personal = string.Empty;
}
但是调用双参数构造函数的现有实现是更干净的解决方案,因为它遵循"不要重复自己"原则。