2012-02-15 5 views
1

本質的にDTOオブジェクト(dtDTOItem)であるパブリックプロパティ(MyDTOItem)を持つコードビハインドページを構築しています。コード(私は例のためにそれを取り除いた)。VB.NET - オブジェクト型の拡張プロパティを自動的に初期化する

私が抱えている問題は、Page_Loadイベントです。 DTOオブジェクトの.Member1プロパティを設定すると、Getコードが実行され、SetおよびDTO ibjectプロパティではなく、.Member1が決して割り当てられません。

コード(MyDTOItem = New dtDTOItem)をPage_Loadイベントに追加すると、正しく値が設定されることがわかりました。私が理解しようとしているのは、明示的に行う必要なしにプロパティオブジェクトを初期化する方法です。カスタムGetとSetコードがあるので、拡張プロパティでなければなりません。

ありがとうございます。

答えて

1

プロパティ値を設定する前に、MyDTOItemプロパティをバックアップするフィールドをインスタンス化する必要があります。あなたは、メンバーをいじめる前に、不正行為をしたり、オブジェクトを導入したりすることはありません。

例:SomeObjectの としてSomeObjectの=新しいSomeObjectの

公開プロパティVisiblePropertyとして

プライベートoBackingField

に終了します を取得します....など

関与イベントはありません。まあ..それはおそらくInitまたはPreInitイベントに動作します..しかし、あなたはそれについてあなたのかわいい頭を心配する必要はありません。それはのように見えた

EDIT 2

前.NET 4あなたは、プロパティアクセサを提供する場合、あなたがあなた自身のバッキングフィールドを提供しなければならないバッキングフィールドを持つすべてのあなたの特性を作る必要があった、とさえまだこの日までに...これは:

Private backingField As DataType = New DataType ' Create backing field and initialize it 

Public Property forwardFacingProperty As DataType 
Get 
    Return backingField 
End Get 
Set (byval tValue as DataType) 
    backingField = tValue 
End Set 
End Property 
+0

どのイベントをお勧めしますか? – wavedrop

+0

面白いことに、自動プロパティを使用すると、インスタンスを作成できます。 – wavedrop

+0

PublicプロパティMyDTOItem As dtDTOItem =新しいdtDTOItemは機能しますが、プロパティを拡張するとすぐに私は「不正行為をする」ことはなく、作成する必要がありますオブジェクトはどこかにある。 – wavedrop

関連する問題