当代码包含在Visual Basic的<>中时

时间:2018-11-04 00:23:11

标签: vb.net

使用vb.net时,如果代码包含在“ <>”符号内,例如名称空间,它将告诉编译器做什么?还有,当这样使用时,这些标志又叫什么?

使问题更清楚;我知道括号“()”通常用于参数,括号“ []”用于声明新类型,但是当以类似的方式使用时,我找不到小于/大于符号的作用。

我查看了我的参考书,并尝试通过互联网进行研究,但我还没有给出答案。最可能的原因是我不知道这些名称的确切含义。我总是以谈论关系运算符为结果,这不是我想要的。

以下是我正在查看的示例:

Imports System.ComponentModel.Design

'<CLSCompliant(True)>
<System.ComponentModel.DefaultEvent("DataReceived")> _
Public Class SerialDF1forSLCMicroCon
Inherits MfgControl.AdvancedHMI.Drivers.DF1ForSLCMicroPLC5
Implements System.ComponentModel.IComponent
Implements System.ComponentModel.ISupportInitialize

Private Shared ReadOnly EventDisposed As New Object()
Public Event Disposed As EventHandler Implements System.ComponentModel.IComponent.Disposed

Protected m_synchronizationContext As System.Threading.SynchronizationContext

具体地说,我正在查看包含的行

<System.ComponentModel.DefaultEvent("DataReceived")> _

1 个答案:

答案 0 :(得分:1)

那是attribute。这是一种将元数据(附加信息)附加到代码中的方法,以后可以使用反射来查询。

例如,假设您有一系列类(例如,Customer,Contact,Order,Product等),每个类都对应于一个数据库表,并且继承自一个DbTable基类常见的DeleteAll()方法。

现在,可能是您的数据库表名称与您的类名称不匹配。在这种情况下,您可以定义一个属性,该属性向您的类添加其他信息,并提供表名,如下所示:

<DbTableName("CUST01")>
Public Class Customer
   Inherits DbTable

   ...
End Class

这表明您的“客户”对象存储在数据库的“ CUST01”表中。

您可以这样实现属性:

Public Class DbTableNameAttribute
   Inherits System.Attribute

   Public Property Name As String

   Public Sub New(value As String)
      Name = value
   End Sub
End Class

最后,在基类DbTable中,您将像这样实现DeleteAll()

Public MustInherit Class DbTable
   Public Sub DeleteAll()
      ' Use reflection to retrieve the attribute.
      Dim attributes = Me.GetType().GetCustomAttributes()
      Dim dbTableNameAttribute = attributes.FirstOrDefault(Function(x) x.GetType() = GetType(DbTableNameAttribute)

      If dbTableNameAttribute IsNot Nothing Then
         Dim tableName As String = CType(dbTableNameAttribute, DbTableNameAttribute).Name

         ' tableName will contain the value specified in the attribute (e.g. "CUST01")
         Dim sql As String = "delete from " & tableName

         ' ... at this point you would send the delete command to your database ...
      End If
   End Sub
End Class

现在,在特定示例中,您引用:<System.ComponentModel.DefaultEvent("DataReceived")>

可能发生的是SerialDF1forSLCMicroCon类可能具有多个事件,并且该属性向设计人员提供了一个提示,即“ DataReceived”事件是默认事件。您将看到带有Windows窗体按钮的类似内容。如果单击某个按钮的事件,则有很多,但是默认情况下,“ Click”事件始终突出显示,因为它是最常用的事件。