forked from dotnet/docs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgetcustattrparam.vb
131 lines (112 loc) · 4.79 KB
/
getcustattrparam.vb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
'<Snippet1>
' Example for the Attribute.GetCustomAttribute( ParameterInfo, Type ) method.
Imports System.Reflection
Namespace NDP_UE_VB
'<Snippet2>
' Define a custom parameter attribute that takes a single message argument.
<AttributeUsage(AttributeTargets.Parameter)> _
Public Class ArgumentUsageAttribute
Inherits Attribute
' This is the attribute constructor.
Public Sub New(UsageMsg As String)
Me.usageMsg = UsageMsg
End Sub
' usageMsg is storage for the attribute message.
Protected usageMsg As String
' This is the Message property for the attribute.
Public Property Message() As String
Get
Return usageMsg
End Get
Set
usageMsg = value
End Set
End Property
End Class
'</Snippet2>
Public Class BaseClass
' Assign an ArgumentUsage attribute to the strArray parameter.
' Assign a ParamArray attribute to strList using the ParamArray keyword.
Public Overridable Sub TestMethod( _
<ArgumentUsage("Must pass an array here.")> _
strArray() As String, _
ParamArray strList() As String)
End Sub
End Class
Public Class DerivedClass
Inherits BaseClass
' Assign an ArgumentUsage attribute to the strList parameter.
' Assign a ParamArray attribute to strList using the ParamArray keyword.
Public Overrides Sub TestMethod( _
strArray() As String, _
<ArgumentUsage("Can pass a parameter list or array here.")> _
ParamArray strList() As String)
End Sub
End Class
Module CustomParamDemo
Sub Main()
Console.WriteLine( _
"This example of Attribute.GetCustomAttribute" & _
"( ParameterInfo, Type )" & vbCrLf & _
"generates the following output.")
' Get the class type, and then get the MethodInfo object
' for TestMethod to access its metadata.
Dim clsType As Type = GetType(DerivedClass)
Dim mInfo As MethodInfo = clsType.GetMethod("TestMethod")
' Iterate through the ParameterInfo array for the method parameters.
Dim pInfoArray As ParameterInfo() = mInfo.GetParameters()
If Not (pInfoArray Is Nothing) Then
Dim paramInfo As ParameterInfo
For Each paramInfo In pInfoArray
' See if the ParamArray attribute is defined.
Dim isDef As Boolean = _
Attribute.IsDefined(paramInfo, _
GetType(ParamArrayAttribute))
If isDef Then
Console.WriteLine( vbCrLf & _
"The ParamArray attribute is defined for " & _
vbCrLf & "parameter {0} of method {1}.", _
paramInfo.Name, mInfo.Name)
End If
' See if ParamUsageAttribute is defined.
' If so, display a message.
Dim usageAttr As ArgumentUsageAttribute = _
Attribute.GetCustomAttribute(paramInfo, _
GetType(ArgumentUsageAttribute))
If Not (usageAttr Is Nothing) Then
Console.WriteLine( vbCrLf & "The " & _
"ArgumentUsage attribute is defined for " & _
vbCrLf & "parameter {0} of method {1}.", _
paramInfo.Name, mInfo.Name)
Console.WriteLine( vbCrLf & _
" The usage message for {0} is: " & _
vbCrLf & " ""{1}"".", _
paramInfo.Name, usageAttr.Message)
End If
Next paramInfo
Else
Console.WriteLine( _
"The parameters information could " & _
"not be retrieved for method {0}.", mInfo.Name)
End If
End Sub
End Module ' DemoClass
End Namespace ' NDP_UE_VB
' This example of Attribute.GetCustomAttribute( ParameterInfo, Type )
' generates the following output.
'
' The ArgumentUsage attribute is defined for
' parameter strArray of method TestMethod.
'
' The usage message for strArray is:
' "Must pass an array here.".
'
' The ParamArray attribute is defined for
' parameter strList of method TestMethod.
'
' The ArgumentUsage attribute is defined for
' parameter strList of method TestMethod.
'
' The usage message for strList is:
' "Can pass a parameter list or array here.".
'</Snippet1>