0

C#3.0で、指定されたクラスのコンストラクターをオーバーロードするときに、クラス本体にデフォルトのコンストラクターを記述する必要があるのはなぜですか?私の知る限り、そうする必要はありませんでした。

class Test
{
      public int ID {get; private set;}
      public int Name {get; private set;}

      public Test() 
      {
      }

      public Test(int id, int name)
      {
           ....
      }

}    

ありがとうございました

4

3 に答える 3

2

質問を振り返ってみましょう。クラスを使用できるようにするために、単一のコンストラクターを作成する必要がないのはなぜですか。

この理由は、コンストラクターを作成しない場合、C#コンパイラーがデフォルトのコンストラクターを出力するためです。簡単にするためだけに。ただし、1つ以上のコンストラクターを指定すると、C#コンパイラーは必要なすべてのコンストラクターを指定したと見なします。その場合、すべてのクラスにデフォルトのコンストラクターが必要なわけではないため、デフォルトのコンストラクターを発行できない可能性があります。

このC#機能はアプリケーション開発者にとっては便利ですが、フレームワーク開発者にとっては煩わしい場合があります。Microsoftの一部のチームは、常にデフォルトのコンストラクターをC#コードで記述しています。これは、クラスに(コードで記述された)コンストラクターがない場合、デフォルトのコンストラクターを明示的に指定しなくても、次のリリースで代替コンストラクターを追加するという間違いを犯しやすいためです。その場合、デフォルトのコンストラクターが欠落しているため、新しいリリースは互換性がありません。

于 2010-04-13T10:29:39.873 に答える
1

クラスがシリアル化されている場合、デフォルトのコンストラクターがない限り、クラスを「再水和」することはできません。

この例としては、クラスがWebサービスとの間のメッセージで使用されている場合、またはクラスがデータベーステーブルやファイルなどのある種のストレージに保存されている場合があります。

于 2010-04-13T10:12:02.577 に答える
0

クラスが有用である場合(つまり、いくつかの適切なデフォルトを提供している場合)、デフォルトコンストラクターが適切です。そうでない場合は、クラスのユーザーにより多くの作業とあいまいさが生じます。

あなたの例のように、あなたはセッターにアクセスできないので、それはかなり役に立たない(あなたのクラスがデフォルトで振る舞わない限り)。

于 2010-04-13T10:10:08.463 に答える