我可以在构造函数中同时调用 this 和 base 重载吗?
Can I call both this and base overloads in a constructor?
我能找到的最接近的线程是 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 的第一个构造函数重载,然后调用基础构造函数重载。不过好像不行。
这里的方法是什么?
正确的做法是
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
的双参数构造函数,使用 this(
而不是 base(
将相同的字符串传递给两个参数。然后删除单参数构造函数的主体,因为所有工作都在双参数构造函数中完成。
我能找到的最接近的线程是 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 的第一个构造函数重载,然后调用基础构造函数重载。不过好像不行。
这里的方法是什么?
正确的做法是
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
的双参数构造函数,使用 this(
而不是 base(
将相同的字符串传递给两个参数。然后删除单参数构造函数的主体,因为所有工作都在双参数构造函数中完成。