[英]In C# 4, how can I have constructors with optional parameters in a subclass of a parent with an overloaded constructor?
我有一个父类,它有一个重载的构造函数,我有一个子类,它有一个带有可选参数的构造函数。 有没有办法让子类的构造函数仍然暴露父类的重载,同时保留它自己的可选参数?
这是两个类及其所需构造函数的一些示例代码:
class Foo {
Foo(String arg0)
{
// do some stuff with arg0
}
Foo(String arg0, List<x> arg1)
: this(arg0)
{
// do some other stuff with arg1 that is special because we have an arg1
}
}
class Bar : Foo {
Bar(String arg0, List<y> arg2 = null, String arg3 = "")
: base(arg0)
{
// some third thing with arg2 and arg3
}
}
这是其他子类构造函数的方法签名我也想要公开父构造函数的重载,但问题是如何做到这一点:
Bar(String arg0, List<x> arg1, List<y> arg2 = null, String arg3 = "")
我认为,我找到了一个解决方案,但我不确定它是否尽可能干净。 我发布它作为答案,以防它是唯一的选择。
如果您可以将Foo
更改为只有一个带有可选参数的构造函数,则可以执行以下操作:
public class Foo
{
public Foo(String arg0, List<x> arg1 = null)
{
// do some stuff with arg0
if (arg1 != null)
{
// do some other stuff with arg1
}
}
}
public class Bar : Foo
{
public Bar(String arg0, List<x> arg1 = null, List<y> arg2 = null, String arg3 = "")
: base(arg0, arg1)
{
// some third thing with arg2 and arg3
}
}
这是我提出的解决方案:
class Foo {
Foo(String arg0)
{
// do some stuff with arg0
}
Foo(String arg0, List<x> arg1)
: this(arg0)
{
// do some other stuff with arg1
}
}
class Bar : Foo {
Bar(String arg0, List<y> arg2 = null, String arg3 = "")
: base(arg0)
{
this.Initialize( arg2, arg3);
}
Bar(String arg0, List<x> arg1, List<y> arg2 = null, String arg3 = "")
: base(arg0, arg1)
{
this.Initialize( arg2, arg3);
}
private void Initialize(List<y> arg2, String arg3)
{
// some third thing with arg2 and arg3
}
}
它看起来有点不干净,因为我没有将子类的构造函数链接在一起,而是调用函数,但是我无法想出任何其他方法来执行此操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.