2

C# クラスの代わりのパラメーターなしのコンストラクターを定義することは可能ですか?

つまり、クラスがありFooます。デフォルトのコンストラクターFoo()と別のコンストラクターが必要SpecialFoo()です。SpecialFoo()コンストラクターがコンストラクターを呼び出してもかまいませんFoo()

それをしてもいいですか?

4

3 に答える 3

7

指定された一連のパラメーターを持つコンストラクターは 1 つしか持てないため、パラメーターのないコンストラクターを 2 つ持つことはできません

ファクトリメソッドになり、クラスの新しいインスタンスを返す別のpublic static Foo SpecialFooメソッドを持つことができますが、それを使用するにはキーワードを使用しません:Foonew

class Foo
{
    public static Foo SpecialFoo()
    {
        return new Foo();
    }
}
var instance1 = new Foo();
var instance2 = Foo.SpecialFoo();
于 2013-12-21T02:16:19.600 に答える
3

コンストラクターは、メソッドと同様に、同一のパラメーター リストを持つオーバーロードを持つことはできません。ただし、次のように静的ファクトリ メソッドを作成できます。

public class Foo
{
    public static Foo SpecialFoo() {
         ...
    }
}

そして、次のように呼び出します。

var foo = new Foo();
var specialFoo = Foo.SpecialFoo();

別の方法は、次のように別のコンストラクターを使用することです。

public class Foo
{
    public Foo(bool special) : this() {
         if (special)
         {
             ...
         }
    }
}

そして、次のように呼び出します。

var foo = new Foo();
var specialFoo = new Foo(true);

もちろん、これは実際には「代替のパラメーターなしのコンストラクター」としての資格はありませんが、静的ファクトリよりもいくつかの利点があります。主に、継承されたクラスで使用および拡張できますが、これはファクトリ メソッドでは許可されていません*。

* 実際には可能ですが、基本ファクトリ メソッドを で非表示にする必要があります。そうしないnewと、警告が表示されます。また、基本クラスの静的メンバーを非表示にすることは一般的に悪い習慣です。

于 2013-12-21T02:17:02.537 に答える