Property Let在VB中意味着什么?

时间:2014-08-13 16:52:52

标签: 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_MyProperty
End Property

我从来没有见过这个。

Public Property Let MyProperty(ByVal value As String)
    m_MyProperty = value
End Property

关键字与设置相同?

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

Properties in VB


MSDN 声明:

Property Let Statement

  

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

Property Set Statement

  

声明构成Property过程主体的名称,参数和代码,该过程设置对象的引用。

除此之外,根据MSDN定义:

Property

  

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

Object

  

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

     
      
  • 表格,查询,表单,报告,宏和模块
  •   
  • 由系统定义的对象,例如MSysObjects表
  •   
     

在Microsoft Access项目中看到的对象:

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

在Access数据库和Access项目中看到的对象:

     
      
  • 数据访问页,它是存储在文件系统中的相应HTML文件的快捷方式(在数据库窗口中显示)
  •   
  • 来自其他应用程序的信息,例如图表(图表)或图纸
  •   

除了我使用 Property Let Statement 的上下文外,没有Access或其他任何内容。

感谢收到的评论。他们引导我到MSDN,虽然我仍然无法理解语句,除了它可以与 Set 语句互换,正如我所看到的它

它们是否真的可以互换?

1 个答案:

答案 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("...")

注意您可以同时为同一属性同时提供LetSet声明,具体取决于您要执行的操作:

  • 您可以处理分配给不同属性的对象(通过Set声明)而不是其他数据类型(使用Let);
  • 或者,如果属性的内部变量是变体,并且您希望允许将对象和标量值分配给属性。

简而言之:

  • 如果要将分配给属性(除对象之外的所有内容),请为该属性添加Let处理程序。
  • 如果您想将 objets 分配给某个媒体资源,那么该媒体资源需要一个Set处理程序。