在对象引用变量前加上感叹号(!)会怎么做?

Ben*_*ack 26 vb6

!在Visual Basic 6.0中将感叹号()放在对象引用变量前面会做什么?

例如,我在代码中看到以下内容:

    !RelativePath.Value = mstrRelativePath
Run Code Online (Sandbox Code Playgroud)

什么!意思?

Han*_*ant 46

这几乎可以肯定是With块中的一个声明:

  With blah
    !RelativePath.Value = mstrRelativePath
  End With 
Run Code Online (Sandbox Code Playgroud)

这是语法糖

  blah("RelativePath").Value = mstrRelativePath
Run Code Online (Sandbox Code Playgroud)

这是语法糖

  blah.DefaultProperty("RelativePath").Value = mstrRelativePath
Run Code Online (Sandbox Code Playgroud)

其中"DefaultProperty"是具有由字符串索引的dispid零的属性.与ADO Recordset对象的Fields属性类似.

糖的一些不可避免的是它会产生蛀牙.这就是你必须在VB6和VBA中使用Set关键字的原因.因为没有它,编译器不知道您是否要复制对象引用或对象的默认属性值.在vb.net中被删除.


Urd*_*rda 7

感叹号似乎充当了成员访问运营商......

会员访问运营商

要访问类型的成员,请使用点(.)或感叹号(!)运算符


我收回之前说过的话.就是这个:

感叹号(!)运算符使用!运算符仅在类或接口上作为字典访问运算符.类或接口必须具有接受单个String参数的默认属性.紧随其后的标识符!operator成为默认属性的字符串参数.