C#で同じクラスの別のコンストラクターからオーバーロードされたコンストラクターを呼び出すことはできますか?
いいえ、できません。C#の別のコンストラクターからコンストラクターを呼び出すことができる唯一の場所は、コンストラクターの後の「:」の直後です。例えば
class foo
{
public foo(){}
public foo(string s ) { }
public foo (string s1, string s2) : this(s1) {....}
}
C#でctor chainingを実行できるのであれば、答えはイエスです。 質問 はすでに質問されています。
しかし、それはコメントから思われます、あなたが本当に求めているのは、「withinオーバーロードされたコンストラクターをプリ/ポスト処理で呼び出すことができます」 ?」
C#にはこれを行う構文はありませんが、共通の初期化関数を使用してこれを行うことができます(C++でctorチェーンをサポートしない場合と同様)
class A
{
//ctor chaining
public A() : this(0)
{
Console.WriteLine("default ctor");
}
public A(int i)
{
Init(i);
}
// what you want
public A(string s)
{
Console.WriteLine("string ctor overload" );
Console.WriteLine("pre-processing" );
Init(Int32.Parse(s));
Console.WriteLine("post-processing" );
}
private void Init(int i)
{
Console.WriteLine("int ctor {0}", i);
}
}
編集:元の投稿のコメントによると、これはC#の質問です。
簡単な答え:はい、this
キーワードを使用します。
長い答え:はい、this
キーワードを使用します。ここに例を示します。
class MyClass
{
private object someData;
public MyClass(object data)
{
this.someData = data;
}
public MyClass() : this(new object())
{
// Calls the previous constructor with a new object,
// setting someData to that object
}
}
C#では、メソッド本体内から別のコンストラクターを呼び出すことはできません。この方法でベースコンストラクターを呼び出すことができます:自分で指摘したfoo(args):base()。同じクラスの別のコンストラクターfoo(args):this()を呼び出すこともできます。
ベースコンストラクターを呼び出す前に何かを実行したい場合、ベースの構築はクラスがいくつかの外部のものに依存しているようです。その場合、基本クラスまたはそのようなもののプロパティを設定するのではなく、基本コンストラクタの引数を使用する必要があります