web-dev-qa-db-ja.com

VB6では、Property SetとProperty Letの違いは何ですか?

いくつかのProperty Setメソッドを作成しましたが、コンパイルされませんでした。それらをProperty Letに変更したとき、すべてが順調でした。

それ以来、ドキュメントを調べてProperty SetProperty Letの違いを見つけましたが、賢明ではないことを認めなければなりません。違いはありますか?もしそうなら、誰かがそれの適切な説明へのポインターを提供できますか?

34
Brian Hooper

Property Setは、オブジェクト(クラスインスタンスなど)用です

Property Letは、「通常の」データ型(例えば、string、boolean、longなど)用です。

29
mwolfe02

Property Letは、Property Setよりも汎用性があります。後者はオブジェクト参照のみに制限されています。クラスにこのプロパティがある場合

Private m_oPicture          As StdPicture

Property Get Picture() As StdPicture
    Set Picture = m_oPicture
End Property

Property Set Picture(oValue As StdPicture)
    Set m_oPicture = oValue
End Property

Property Let Picture(oValue As StdPicture)
    Set m_oPicture = oValue
End Property

Property Set Pictureを呼び出すには

Set oObj.Picture = Me.Picture

両方でProperty Let Pictureを呼び出すことができます

Let oObj.Picture = Me.Picture
oObj.Picture = Me.Picture

Property Setの実装は、他の開発者がオブジェクト参照であるプロパティに期待するものですが、Microsoftが参照プロパティにProperty Letのみを提供する場合もあり、Setステートメントなしの異常な構文oObj.Object = MyObjectにつながります。この場合、SetクラスにProperty Set Objectが実装されていないため、oObjステートメントを使用するとコンパイル時または実行時エラーが発生します。

私は、標準タイプ(フォント、画像など)のプロパティにProperty SetProperty Letの両方を実装する傾向がありますが、セマンティクスは異なります。通常Property Letで「ディープコピー」を実行する傾向があります。つまり、元のオブジェクトへの参照を保持する代わりにStdFontを複製します。

24
wqw

Property Setはオブジェクトに似た変数(ByRef)用で、Property Letは、値のような変数用です(ByVal)

4
Foo Bah