0

したがって、私のクラス「myInfo」には、クラスとしてのプロパティであるエイリアス化されたプロパティ「HeaderInfo」があります。実際には、はるかに深いクラスのヘッダーです。

Private _header As myHeader
Public Property HeaderInfo() AS myHeader
    Get
        Return _header
    End Get
    Set(ByVal value As myHeader)
        _header = value
        Someotherclass.Foo.Bar.AnotherThing.Header = _header
    End Set
End Property

myHeader は、すべて文字列である「名前」、「ID」などのプロパティを持つクラスです。したがって、Windows フォームなどでこのプロパティを参照するときは、

Dim info As New myInfo()
info.HeaderInfo.ID = "ID HERE"
info.HeaderInfo.Name = "Name here"

info.HeaderInfo のインスタンスがすべてのプロパティを正しく設定している範囲で機能しますが、

Someotherclass.Foo.Bar.AnotherThing.Header = _header

プロパティを直接設定していないため、myInfo.HeaderInfo 'Set' 内で設定されることはありません。伝播すると仮定して、そのサブプロパティを設定しています。カスタム タイプのプロパティがどのように機能するか理解していませんか? これを広める方法はありますか?

4

1 に答える 1

1

これを自動的に行うには、myHeader 型のプロパティのセッターを変更する必要があります。そのためには、型インスタンスが myInfo 型の特定のインスタンスについて認識している必要があります。

これが期待どおりに機能しない理由を見てみましょう。そのために、このステートメントを分割します。

info.HeaderInfo.ID = "ID HERE"

そのステートメントが実行されると、まず、info変数が参照するオブジェクト インスタンスを取得するために、変数を逆参照する必要があります。1そのオブジェクトを取得したら、myHeader オブジェクト インスタンスへの参照を取得するために、HeaderInfo プロパティを取得する(設定しない) 必要があります。myHeader オブジェクトを取得したら、ID プロパティのセッターを呼び出して割り当てを完了します。

うまくいけば、これがなぜこのように機能するのかが明らかになります。HeaderInfo プロパティにアクセスしますが、ゲッターのみを使用します。

1補足: 「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というメッセージが表示された場合は、これが問題です: 式で予期していなかった変数またはプロパティが Nothing/null でした。

于 2013-02-13T14:41:46.510 に答える