2017-09-17 8 views
0

私はVSを使用してC#でデータベースアプリケーションを開発しています。私はクルーと呼ばれるクラスを持っていて、その名前、生年月日などのフィールドを持っています。フィールドのいくつかを指定する必要がありますが、アプリケーション自体によって自動的に計算されます。生年月日から計算される年齢など。ここで私は、このやっている方法です:デバッグ中クラスのプロパティを定義する際の例外

[Required] 
[DisplayName("Date of Birth")] 
public DateTime DOB 
{ 
    set { } 
    get { return DOB.Date; } 
} 
public int Age 
{ 
    get { return Convert.ToInt32(DateTime.Now.Year) - Convert.ToInt32(DOB.Year); } 
} 

を、私は人のためのフィールドを記入し、データベースに保存するためのボタンを作成打つが、例外は、次のことを言って生じ:

System.StackOverflowExceptionが発生しました HResult = 0x800703E9メッセージ= 'System.StackOverflowException'タイプの例外がスローされました。

答えて

2

DOBのゲッターでは、DOBを参照してください。したがって、DOBを参照するDOBのゲッターにアクセスする必要があります。したがって、DOBにアクセスする必要があります。

値を取得しようとするとプロパティにアクセスできません。また、無限ループに入り、SO例外が発生します。プロパティはによって入力されようとしているので、

private DateTime _dob; 

public DateTime DOB 
{ 
    get { return _dob; } 
    set { _dob= value; } 
} 
+0

私はクラスの外から値を格納する必要があります:あなたは値を格納privateバッキングフィールドを持つことでこれを回避することができ、その後、プロパティのゲッターであることへのアクセスユーザー。 –

+0

OPの質問に基づいて、それは 'get {return _dob.Date; } ' –

+0

@StephenMuecke、プライベートの場合はどうすれば_dobを割り当てることができますか? –

関連する問題