我经常遇到看起来像这样的代码。
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
让关键字与设置相同?
根据这篇文章,似乎是这样。
MSDN 声明:
声明构成Property Let过程主体的名称,参数和代码,该过程为属性赋值。
声明构成Property过程主体的名称,参数和代码,该过程设置对象的引用。
除此之外,根据MSDN定义:
您设置的控件,字段或对象的命名属性,用于定义对象的一个特征(例如大小,颜色或屏幕位置)或其行为的一个方面(例如是否对象被隐藏了。)
在Microsoft Access数据库中看到的对象:
- 表格,查询,表单,报告,宏和模块
- 由系统定义的对象,例如MSysObjects表
在Microsoft Access项目中看到的对象:
- 存储在Access项目文件中的对象:表单,报表,宏和模块
- 存储在Microsoft SQL Server数据库中的对象:表,表属性(例如> - 索引,触发器,键,约束,默认值,规则和用户定义的数据类型),视图,存储过程和数据库图表
- 系统定义的对象,例如sysindexes表
在Access数据库和Access项目中看到的对象:
- 数据访问页,它是存储在文件系统中的相应HTML文件的快捷方式(在数据库窗口中显示)
- 来自其他应用程序的信息,例如图表(图表)或图纸
除了我使用 Property Let Statement 的上下文外,没有Access或其他任何内容。
感谢收到的评论。他们引导我到MSDN,虽然我仍然无法理解让语句,除了它可以与 Set 语句互换,正如我所看到的它
它们是否真的可以互换?
答案 0 :(得分:4)
你几乎回答了自己的问题。
从MSDN文档中可以看出,属性的Let
声明用于指定值,即用于的任何数据类型 >对象(通常通过Set
分配)。
因此,遵循相同的逻辑,如果您希望/需要能够分配对象,并且只有对象(已键入或未对象)分配给属性,则将使用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
声明,具体取决于您要执行的操作:
Set
声明)而不是其他数据类型(使用Let
); 简而言之:
Let
处理程序。Set
处理程序。