C# - 构造函数的链调用

Env*_*lap 3 c# parameters constructor chaining

我正在学习C#,我正在学习构造函数和构造函数的链调用,以便不必在每个构造函数中粘贴相同的代码(变量的相同值).

我有三个构造函数,一个没有参数,一个有三个参数,一个有四个参数.我要做的是,使用默认构造函数调用三个参数的构造函数,传递参数(变量)的默认值和具有三个参数的构造函数,我正在寻找用四个参数调用构造函数参数.我似乎有第一个排序列出默认值,但我正在努力如何编写具有三个参数的构造函数,然后如果需要,让它用四个参数调用构造函数.

默认构造函数应将类型字符串的所有实例变量分配给string.Empty.

public Address()
{
   m_street = string.Empty;
   m_city = string.Empty;
   m_zipCode = string.Empty;
   m_strErrMessage = string.Empty;
   m_country = Countries;
}


public Address(string street, string city, string zip)
{
}

public Address(string street, string city, string zip, Countries country)
{
}
Run Code Online (Sandbox Code Playgroud)

我当时想要做以下事情,但它不起作用: -

public Address(string street, string city, string zip)
     : this street, string.Empty, city, string.Empty, zip, string.Empty
{
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 11

您通常应该将具有最少信息的构造函数链接到具有最多信息的构造函数,而不是反过来.这样,每个字段都可以在一个地方分配:具有最多信息的构造函数.你实际上已经在帖子中描述了这种行为 - 但是你的代码完全不同.

您还需要使用正确的语法进行构造函数链接,即:

: this(arguments)
Run Code Online (Sandbox Code Playgroud)

例如:

public class Address
{
    private string m_street;
    private string m_city;
    private string m_zipCode;
    private string m_country;

    public Address() : this("", "", "")
    {
    }


    public Address(string street, string city, string zip)
        : this(street, city, zip, "")
    {
    }

    public Address(string street, string city, string zip, string country)
    {
        m_street = street;
        m_city = city;
        m_zip = zip;
        m_country = country;
    }
}
Run Code Online (Sandbox Code Playgroud)

有关构造函数链接的更多信息,请参阅我刚才写的这篇文章.