我可以在构造函数中调用this和base重载吗?

时间:2016-03-21 15:54:03

标签: c# constructor constructor-overloading

我能找到的最接近的线程是this one,但是那里的场景有所不同 - 要调用的基本构造函数是默认的。在这里,我需要指定我想要传递的参数。

假设我们有以下情况:

    public class Base
    {
        public string Str;

        public Base(string s)
        {
            Str = s;
        }
    }

    public class A : Base
    {
        public string Str2;

        public A(string str2)
            : base(str2)
        {
            Str2 = str2;
        }

        public A(string str2, string str)
            : base(str)
        {
            Str2 = str2;
        }
    }

我想避免在A的第二个构造函数重载中重复相同的逻辑(从技术上讲,我可以将所有逻辑包装到一个函数中,减少复制粘贴/提高可维护性,因为最后所有重载都依赖于相同的代码。如果没有其他解决方案,请遵循此。)

我以为我可以先调用A的第一个构造函数重载,然后调用基本的重载。但似乎我不能。

这里的方法是什么?

1 个答案:

答案 0 :(得分:2)

正确的方法是

public class A : Base
{
    public string Str2;

    public A(string str2)
        : this(str2, str2)
    {
    }

    public A(string str2, string str)
        : base(str)
    {
        Str2 = str2;
    }
}

A的单个参数构造函数调用A的2参数构造函数,使用this(而不是base(将相同的字符串传递给两个参数。然后删除单个参数构造函数的主体,因为所有工作都在两个参数构造函数中完成。