[英]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.