2

私が言ったように、プロパティのプロパティを設定するのに問題があります。トランザクションを表すクラスがあるとしましょう。私のクラスには、次のような別のクラスを表すプロパティがあります。

Public Class PersonRecord

    _myPerson = new Person()

    Public Property MyPerson as Person
    Get
        _myPerson = Person.GetAppropriatePerson(Me.PersonID)

        return _myPerson
    End Get

    Set
        _myPerson = value
    End Set
    End Property

したがって、基本的に、適切な人を取得する取得フィルターを持つプロパティがあります。問題は、プロパティを介して Person の情報を設定したい場合、VB は私がそれを行ったことを無視しているように見えることです。たとえば、次のようになります。

Me.myPersonRecord.Person.Name = "Some Name"

しかし、これに時計を付けると、プロパティを設定した後、私の値は変わりません。私はこの行動に困惑しています。私が間違っていることはありますか?ありがとう!

4

3 に答える 3

7

コピー アンド ペースト エラーかどうかはわかりませんが_myPerson、プロパティの Get 部分で毎回上書きしているようです。それはあなたの「ある名前」が上書きされる可能性が高いでしょう:-)

edit do'h、codeapeは私の数秒前に同じことを言います:-)

このようなプロパティの遅延初期化の一般的なパターンは、次のようなことを行うことです。これは、オブジェクトを上書きする前に null かどうかをチェックします。

Public Property MyPerson as Person
Get
    If _myPerson Is Nothing Then
        _myPerson = Person.GetAppropriatePerson(Me.PersonID)
    End If
    return _myPerson
End Get

_myPerson初期化をストレートdim _myPerson as Personに変更する必要がありdim _myPerson as New Person()ます。

于 2009-06-22T13:49:25.040 に答える
4

get を実行するたび.MyPersonに、関数Person.GetAppropriatePersonが呼び出されます。

その関数の実装はわかりませんが、呼び出されるたびに新しい Person オブジェクトを返すと思います。

1 つの Person インスタンスの Name を変更します。次に を呼び出すと.MyPerson、別の Person インスタンスが返されます。

これがどのように機能するかによって、いくつかのことを実行できます。たとえば、次のようになります。

  • コンストラクターを呼び出しますGetAppropriatePerson(その時点で personid がわかっている場合)。戻り値を_myPersonに代入し、MyPersonプロパティを読み取り専用にします。
  • またはに初期化_myPersonしてからnullMyPersonゲッターにif _myPerson == null Then _myPerson = GetAppropriatePerson etc.
于 2009-06-22T13:49:23.107 に答える
1

次の行で変更する必要があります: _myPerson = Person.GetAppropriatePerson(Me.PersonID)

あなたのコードをステップスルー...

于 2009-06-22T13:50:21.467 に答える