2011-07-18 7 views
0

アクセサーブロックの実行中に現在のプロパティ値を取得するにはどうすればよいですか? 私はこのようないくつかに対処しようとした:getアクセサの現在のプロパティ値

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 
public DateTime? birthDate 
{ 
    get 
    { 
     return CommonClass.GetDT(birthDate); 
    } 
    set 
    { 
     birthDate = CommonClass.GetDT(value); 
    } 
} 

public class CommonClass 
{  
    public static DateTime? GetDT(DateTime v) 
    { 
     if (v == DateTime.MinValue) 
     { 
      return null; 
     } 
     else 
     { 
      return v; 
     } 
    } 
    public static DateTime? GetDT(DateTime? v) 
    { 
     if (!v.HasValue) 
     { 
      return null; 
     } 
     else 
     { 
      return v; 
     } 
    } 
} 

しかし、このコードが出て粉砕します。あなたは、Microsoftのチュートリアルに見ればしかし、あなたは自己のプロパティ値を使用することができますいくつかのサンプルを見ることができます:

public string Name 
{ 
    get 
    { 
     return name != null ? name : "NA"; 
    } 
} 

Here

答えて

4

変数名とメソッド名は大文字と小文字が区別されます。つまり、「名前」と「名前」が異なることを意味します。

private string name; // the name field 
public string Name // the Name property 
{ 
    get 
    { 
     return name; 
    } 
} 

ので

private DateTime? birthDate 
public DateTime? BirthDate 
{ 
    get 
    { 
     return CommonClass.GetDT(birthDate); 
    } 
    set 
    { 
     birthDate = CommonClass.GetDT(value); 
    } 
} 
+0

パーフェクト!だから簡単でエレガントなソリューション!どうもありがとうございます! – kseen

1

財産の取得や設定アクセサだけの方法です。 -

public string get_Name() 
{ 
    ... 
} 

public void set_Name(string value) 
{ 
    ... 
} 

このように考えると、特別なことは何もないことがわかります。特別な「自己」または「現在の価値」はありません。

2番目のコード例では、プロパティの値を格納するために使用される 'name'という名前のフィールドが必要です。これだけではなく、プロパティの「現在の値」です。

+0

うんにあなたを変える、アダムは、私が参照してください。しかし、私は最初のコードサンプルを使用しようとすると、誕生日の価値を何度も得ようとする無限ループに陥るようです(この行は 'Return CommonClass.GetDT(birthDate);')。その結果、スタックオーバーフロー例外エラーが発生します。ありがとう! – kseen

+0

@Adam: 'get_Name()' –

+0

@Jalal:ありがとう、編集 –

関連する問題