2011-11-14 25 views
0

したがって、コンストラクタ内のプロパティを使用してプライベートインスタンス変数(フィールド)を検証するにはどうすればよいですか?プロパティからの設定検証を使用してコンストラクタ内にプライベートフィールドを設定する

私が働くこのコードをしているが、私は、これは行われることになっているかではない強い気持ちを持っている:私はちょうどこれはそれを行うための正しい方法であることを確認する

class Account 
    { 
     private decimal acctBalance = 0; 

     public decimal AcctBalance 
     { 
      get 
      { 
       return acctBalance; 
      } 
      set 
      { 
       if (acctBalance >= 0) 
        acctBalance = value; 
       else 
       { 
        Console.WriteLine("Invalid balance, balance set to 0"); 
        acctBalance = 0; 
       } 
      } 
     } 

     public Account(decimal balance) 
     { 
      acctBalance = balance; 
      AcctBalance = acctBalance; 
     } 
    } 

ありがとうございました!

答えて

3

あなたのアプローチはほとんど正しいですが、いくつかの問題があります。私はそれらを修正し、私が行ったところでコメントにコメントを付けました。

class Account 
{ 
    private decimal acctBalance = 0; 

    public decimal AcctBalance 
    { 
     get 
     { 
      return acctBalance; 
     } 
     set 
     { 
      //modified to check value instead of acctBalance 
      if (value >= 0) 
       acctBalance = value; 
      else 
      { 
       Console.WriteLine("Invalid balance, balance set to 0"); 
       acctBalance = 0; 
      } 
     } 
    } 

    public Account(decimal balance) 
    { 
     //redundant! Changing AcctBalance changes acctBalance 
     //acctBalance = balance; 
     AcctBalance = balance; 
    } 
} 
+0

それは、私はちょうどこれはそれを行うための正しい方法であることを確認するには、具体的にプライベートフィールドを設定するために、パブリックプロパティを使用するように私に尋ねる宿題である、または少なくとも一般的に受け入れられている方法 – bruchowski

+0

その場合、私は私の答えを編集します。ある瞬間、良い先生! –

+0

正確な指示は次のとおりです。 "基本クラスのアカウントには、口座残高を表すためにdecimal型のプライベートインスタンス変数を1つ含める必要があります。クラスは、初期残高を受け取り、インスタンス変数をpublicプロパティで初期化するコンストラクタを提供します。このプロパティでは、初期残高が0.0以上であることを確認する必要があります。残高が0.0に設定されていて、設定されたアクセサに初期残高が無効であることを示すエラーメッセージが表示されるはずです。 – bruchowski

関連する問題