- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这两个子程序在类中执行相同的操作。
Sub DemoMe( )
Me.AboutMe ' Calls AboutMe procedure.
End Sub
Sub DemoMe( )
AboutMe ' Does the same thing.
End Sub
重点是什么? Me 关键字有什么作用吗?对象访问其自身成员的首选方式是什么?
最佳答案
tldr;不,尽管在某些情况下它可能有用。
<小时/>来自 VBA 语言规范 ( 5.3.1.5 ):
Each procedure that is a method has an implicit ByVal parameter called the current object that corresponds to the target object of an invocation of the method. The current object acts as an anonymous local variable with procedure extent and whose declared type is the class name of the class module containing the method declaration. For the duration of an activation of the method the data value of the current object variable is target object of the procedure invocation that created that activation. The current object is accessed using the Me keyword within the <procedure-body> of the method but cannot be assigned to or otherwise modified.
这就是全部,只是一个“自由”局部变量,它引用正在调用该方法的特定实例。这也恰好是过程调用期间的默认上下文,因此如果代码打算在当前实例上操作,则可以省略它。尽管正如 @HansPassant 在 comment above 中指出的那样,它还允许编辑器绑定(bind)到界面并提供 IntelliSense。
也就是说,在某些情况下您可能想要或必须使用它(这绝不是详尽的列表):
<小时/>命名冲突:
如果您的类有一个“隐藏”内置 VBA 函数的成员,则可以使用它来使作用域显式化:
Public Property Get Left() As Long
'...
End Property
Public Property Get Right() As Long
'...
End Property
Public Property Get Width() As Long
Width = Me.Right - Me.Left
End Property
<小时/>
股权检查:
Public Function Equals(other As Object) As Boolean
If other Is Me Then
Equals = True
Exit Function
End If
'...
End Function
<小时/>
流畅的功能:
这可能是组合对象的有用模式 - 您执行一个操作,然后返回类的实例,以便它们可以“链接”。 Excel 的 Range
界面在很多情况下都会执行此操作:
Public Function Add(Value As Long) As Class1
'Do whatever.
Set Add = Me
End Function
Public Sub Foo()
Dim bar As New Class1
bar.Add(1).Add(1).Add 1
End Sub
关于excel - 类模块中是否需要 Me 关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54887822/
我是一名优秀的程序员,十分优秀!