39

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

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

4

3 に答える 3

36

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

Property Let「通常の」データ型(たとえば、文字列、ブール値、longなど)用です。

于 2011-02-18T14:51:29.637 に答える
28

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異常な構文につながります。この場合、ステートメントを使用すると、クラスに実装されていないため、コンパイル時または実行時のエラーが発生します。oObj.Object = MyObjectSetSetProperty Set ObjectoObj

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

于 2011-02-19T07:41:29.863 に答える
4

Property Setオブジェクトのような変数(ByRef)Property Let用であるのに対し、値のような変数(ByVal)用です

于 2011-02-18T14:24:29.300 に答える