需要了解重载的构造函数

本文关键字:构造函数 重载 了解 | 更新日期: 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;
}

考虑到您的构造函数可以做的不仅仅是分配字段。

它是如何工作的?您可以尝试,调试并学习它。我不确定,但我认为它会首先调用重载的,然后调用构造函数的代码。在您的方案中,调用电子邮件(字符串工作邮件)将调用第一个电子邮件(字符串工作邮件,字符串个人邮件)。

退房:

  1. http://www.c-sharpcorner.com/UploadFile/vishnuprasad2005/HowuseCSharpConstructors11302005015338AM/HowuseCSharpConstructors.aspx

  2. http://blog.degree.no/2012/03/calling-an-overloaded-constructor-from-another-constructor-c/

  3. http://weblogs.asp.net/scottcate/archive/2005/11/23/431412.aspx
我想

说的是,提供第二个构造函数主要是为了方便起见,以便在没有个人邮件地址的情况下更容易使用类。然后,类的用户只需要指定工作地址,类本身将通过为该字段设置合理的默认值来处理不存在的个人地址。如果缺少该参数,则该类的用户将负责填充字符串。对于缺少个人邮件地址,为空。

构造函数作为对另一个构造函数的调用实现,以避免代码重复。它也可以写成

public Email(string workMail)
{
    m_work = workMail;
    m_personal = string.Empty;
}

但是调用双参数构造函数的现有实现是更干净的解决方案,因为它遵循"不要重复自己"原则。