C# オブジェクト初期化子を使用してオブジェクトを作成しようとしています。しかし、そのクラスには、必要に応じて1つの引数を持つコンストラクターが既にあり、デフォルトのコンストラクターは必要ないため、提供しませんでした。クラスにユーザー提供のコンストラクターがある場合、コンパイラーもデフォルトのコンストラクターを提供しません。
オブジェクト初期化子を使用してこのクラスのインスタンスを作成しようとすると、問題が発生します。
public class Foo
{
public int Data { get; set; }
public Foo(int Data)
{
this.Data = Data;
}
}
次のようにクラスをインスタンス化します。
Foo f=new Foo { Data=10};
そして今、コンパイル時エラーが発生しています:
「Foo には、0 引数を取るコンストラクターが含まれていません」
私はエラーを知っています。それはデフォルトのコンストラクターがないためです。デフォルトのコンストラクターが必要ないのに、オブジェクト初期化子を使用するためだけにコンストラクターを提供する必要があるのはなぜですか? デフォルトのコンストラクターを明示的に提供せずにこのオブジェクト初期化子を使用できる他の方法 (スタイル、構文) はありますか?
このMSDNリンクを確認しました。クラスにプライベートデフォルトコンストラクターがある場合、オブジェクト初期化子を使用できないと書かれていますが、ここにはプライベートデフォルトコンストラクターがありません。