4

非常に単純な質問ですが、プロパティを使用してコンストラクターのフィールドを初期化する必要がありますか、それとも直接参照する必要がありますか?

例:

public class Foo()
{
   private string example;

   public String Example
   {
      get/set etc..
   }

   public Foo(string exampleIn)
   {
      Example = exampleIn;
   }
}

または、これを行う方が良い方法ですか?

public class Foo()
{
   private string example;

   public String Example
   {
      get/set etc..
   }

   public Foo(string exampleIn)
   {
      example = exampleIn;
   }
}

いずれにせよ、どちらもカプセル化に違反するとは思わないので、好ましい方法があるかどうか疑問に思っていますか?

4

3 に答える 3

2

ここには正解も不正解もありません (そのため、締めくくりに投票したくなります)。しかし、私はこれについてジェイコブに同意する傾向があります。自動プロパティがあるので、特にプロパティのゲッターとセッターのルートを好みます。何らかの理由で決定に影響を与える場合に備えて、ゲッターとセッターで異なるアクセス変更を行うことができることに注意してください。つまり、コンストラクターでプロパティを使用する場合は、一貫性を保ち、クラス内の他の場所でも排他的に使用するようにしてください。これは、セッターを外部に公開したくないという意味かもしれません。

public class Foo()
{
   private string example;

   public String Example
   {
     get { return example; }
     private set { example = value; }
   }

   public Foo(string exampleIn)
   {
      Example = exampleIn;
   }
}
于 2013-03-15T00:06:35.717 に答える
0

C#3.0で導入された自動プロパティの前は、2番目の例は私の意見ではより「適切」です。自動プロパティを使用すると、これが最適だと思います。

public class Foo()
{
   private string example;

   public String Example
   {
      { get; set; }
   }

   public Foo(string exampleIn)
   {
      Example = exampleIn;
   }
}
于 2013-03-14T17:30:32.860 に答える
0

データ値が Setter 内でさらに処理されるかどうかによって異なります。値の処理が必要な場合は、@Jacob が言ったことを使用することをお勧めしますが、値がさらに処理されない場合 (ほとんどのシナリオではそうです)、setter メソッドへの余分なメソッド呼び出しを避けるためにプライベート メンバーを使用することをお勧めします。 . CLR がコードをコンパイルすると、Get プロパティと Set プロパティの 2 つのメソッドが作成され、プロパティを使用してプロパティを定義する値にアクセスまたは変更すると、不必要に余分なメソッドが呼び出されます (値がさらに処理されない場合)。

于 2015-10-09T10:17:28.063 に答える