0

私はC#でASP.NET MVC3に取り組んでいます。以下のようなエラーが出ました

Type 'Test' already defines a member called 'Test' with the same parameter types

私のコードは次のとおりです。

public partial class Test
{
    Test()
    {
       //some code
    }
}

public partial class Test
{
    Test()
    {
        days = new List<SelectListItem>();
    }

    public IList<SelectListItem> days { get; set; }
}

両方のクラスは別のファイルにあります。
最初の部分クラスを変更したくありません。では、同じコンストラクターを 2 回呼び出さなければならないこのような状況をどのように処理できますか?

4

2 に答える 2

7

1 つのアプローチはpartialメソッドです。

public partial class Test
{
    partial void OnCtor() // implement the partial method
    {
       //some code
    }
}

public partial class Test
{
    partial void OnCtor(); // declare the partial method
    Test()
    {
        days = new List<SelectListItem>();
        OnCtor();          // invoke the partial method **if implemented**
    }

    public IList<SelectListItem> days { get; set; }
}

重要なこと:実装のある場所にメソッドOnCtorを追加しないと、呼び出しコードから完全に蒸発します。つまり、呼び出しはコンパイルされません。

これは、生成されたコードが拡張ポイントを公開およびアドバタイズできるため、コード ジェネレーターで一般的なアプローチです。開発者は、部分クラスの独自の部分でカスタマイズできますが、そうでない場合は影響 (パフォーマンスなど) はありません。実装されました。

于 2012-08-15T10:58:52.763 に答える
5

不要なコンストラクターを取り除くことで解決します。

public partial class Test
{
    Test()
    {
       //some code
    }
}

public partial class Test
{
    private IList<SelectListItem> _days = new List<SelectListItem>();

    public IList<SelectListItem> days {
        get { return _days; }
        set { _days = value; }
    }
}
于 2012-08-15T11:01:39.117 に答える