Properties 属性Let在VB中的含义是什么?

Properties 属性Let在VB中的含义是什么?,properties,vb6,Properties,Vb6,我经常遇到这样的代码 Public Property Get MyProperty() As String MyProperty = m_MyProperty End Property Public Property Set MyProperty(ByVal value As String) m_MyProperty = value End Property 甚至: Public Property Get MyProperty() As String Return m

我经常遇到这样的代码

Public Property Get MyProperty() As String
    MyProperty = m_MyProperty
End Property

Public Property Set MyProperty(ByVal value As String)
    m_MyProperty = value
End Property
甚至:

Public Property Get MyProperty() As String
    Return m_MyProperty
End Property
我从来没有遇到过这个

Public Property Let MyProperty(ByVal value As String)
    m_MyProperty = value
End Property
Let关键字是否与Set相同

根据这篇文章,似乎是这样


MSDN声明:

声明构成Property Let过程主体的名称、参数和代码,该过程为属性赋值

声明构成属性过程主体的名称、参数和代码,属性过程设置对对象的引用

除此之外,根据MSDN定义:

控件、字段或对象的命名属性,用于定义对象的一个特征(如大小、颜色或屏幕位置)或其行为的一个方面(如对象是否隐藏)

在Microsoft Access数据库中看到的对象:

  • 表、查询、窗体、报表、宏和模块
  • 由系统定义的对象,例如MSysObjects表
在Microsoft Access项目中看到的对象:

  • 存储在Access项目文件中的对象:窗体、报表、宏和模块
  • 存储在Microsoft SQL Server数据库中的对象:表、表属性(例如>-索引、触发器、键、约束、默认值、规则和用户定义的数据类型)、视图、存储过程和数据库关系图
  • 由系统定义的对象,如sysindexes表
Access数据库和Access项目中的对象:

  • 数据访问页,是指向文件系统中存储的相应HTML文件的快捷方式(显示在数据库窗口中)
  • 来自其他应用程序的信息,如图表或图形
除了我看到使用属性Let语句的上下文之外,没有访问权限或其他任何内容

感谢收到的评论。他们引导我找到了MSDN,尽管我仍然无法理解Let语句的含义,只是在我看来,它可以与Set语句互换


它们真的可以互换吗?你几乎回答了你自己的问题

从MSDN文档中可以看到,属性的
Let
声明用于分配值,即用于除对象之外的任何数据类型(通常通过
Set
进行分配)

因此,按照相同的逻辑,如果您希望/需要能够将对象分配给属性,并且仅将对象(键入或不键入)分配给属性,则将使用
声明

那么,假设你有:

Property Let MyFirstProperty(NewValue As String)
    m_sMyFirstProperty = NewValue
End Property

Property Set MySecondProperty(NewValue As Object)
    Set m_oMySecondProperty = NewValue
End Property
那么,以下操作将不起作用:

' This won't work
MyFirstProperty = CreateObject("...")
' Neither will this
Set MyFirstProperty = CreateObject("...")
' Also, the following won't be allowed
MySecondProperty = "My new string"
但以下两项声明将:

MyFirstProperty = "My new string"
Set MySecondProperty = CreateObject("...")
注意您可以同时对同一属性进行
Let
Set
声明,具体取决于您要执行的操作:

  • 与其他数据类型(使用
    Let
    )相比,您可以以不同的方式处理分配给属性的对象(通过
    集合
    声明)
    
  • 或者,如果属性的内部变量是变量,并且希望允许将对象和标量值都指定给属性
简言之,那么:

  • 如果要将指定给属性(对象除外),请为属性添加
    Let
    处理程序
  • 如果要为属性指定objets,则需要属性的
    Set
    处理程序

Let用于变量,Set用于对象,但它们在Prop getter/setters中可能是可交换的。VB6文档说“属性集定义了一个属性过程,它设置了对对象的引用。”+1对于您所说的根据某些因素,同一物业也可以同时拥有Let和Set的部分,并且提供了一个易于理解的示例。有时候,一个人可能在某种程度上理解了某件事,只是想确保自己理解了正确的事情