簡體   English   中英

在C#4中,如何在具有重載構造函數的父類的子類中具有帶可選參數的構造函數?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM