当前位置: 首页>>代码示例>>VB.NET>>正文


VB.NET FieldBuilder.SetCustomAttribute方法代码示例

本文整理汇总了VB.NET中System.Reflection.Emit.FieldBuilder.SetCustomAttribute方法的典型用法代码示例。如果您正苦于以下问题:VB.NET FieldBuilder.SetCustomAttribute方法的具体用法?VB.NET FieldBuilder.SetCustomAttribute怎么用?VB.NET FieldBuilder.SetCustomAttribute使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在System.Reflection.Emit.FieldBuilder的用法示例。


在下文中一共展示了FieldBuilder.SetCustomAttribute方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的VB.NET代码示例。

示例1: New

' 导入命名空间
Imports System.Threading
Imports System.Reflection
Imports System.Reflection.Emit

Namespace MySample
   <AttributeUsage(AttributeTargets.All, AllowMultiple:=False)> Public Class MyAttribute1
      Inherits Attribute
      Public myCustomAttributeValue As String

      Public Sub New(ByVal myString As String)
         myCustomAttributeValue = myString
      End Sub
   End Class
   <AttributeUsage(AttributeTargets.All, AllowMultiple:=False)> Public Class MyAttribute2
      Inherits Attribute
      Public myCustomAttributeValue As Boolean

      Public Sub New(ByVal myBool As Boolean)
         myCustomAttributeValue = myBool
      End Sub
   End Class

   Class FieldBuilder_Sample

      Private Shared Function CreateCallee(ByVal currentDomain As AppDomain) As Type
         ' Create a simple name for the assembly.
         Dim myAssemblyName As New AssemblyName()
         myAssemblyName.Name = "EmittedAssembly"
         ' Create the called dynamic assembly.
         Dim myAssemblyBuilder As AssemblyBuilder = _
                     currentDomain.DefineDynamicAssembly(myAssemblyName, _
                     AssemblyBuilderAccess.RunAndSave)
         Dim myModuleBuilder As ModuleBuilder = _
               myAssemblyBuilder.DefineDynamicModule("EmittedModule", _
                                                   "EmittedModule.mod")
         ' Define a public class named 'CustomClass' in the assembly.
         Dim myTypeBuilder As TypeBuilder = myModuleBuilder.DefineType("CustomClass", _
                                                TypeAttributes.Public)
         ' Define a private String field named 'MyField' in the type.
         Dim myFieldBuilder As FieldBuilder = myTypeBuilder.DefineField("MyField", _
                                       GetType(String), FieldAttributes.Public)
         Dim myAttributeType1 As Type = GetType(MyAttribute1)
         ' Create a Constructorinfo object for attribute 'MyAttribute1'.
         Dim myConstructorInfo As ConstructorInfo = _
                     myAttributeType1.GetConstructor(New Type(0) {GetType(String)})
         ' Create the CustomAttribute instance of attribute of type 'MyAttribute1'.
         Dim attributeBuilder As _
         New CustomAttributeBuilder(myConstructorInfo, New Object(0) {"Test"})
         ' Set the CustomAttribute 'MyAttribute1' to the Field.
         myFieldBuilder.SetCustomAttribute(attributeBuilder)

         Dim myAttributeType2 As Type = GetType(MyAttribute2)
         ' Create a Constructorinfo object for attribute 'MyAttribute2'.
         Dim myConstructorInfo2 As ConstructorInfo = _
                  myAttributeType2.GetConstructor(New Type(0) {GetType(Boolean)})
         ' Set the CustomAttribute 'MyAttribute2' to the Field.
         myFieldBuilder.SetCustomAttribute(myConstructorInfo2, New Byte() {1, 0, 1, 0, 0})

         ' Create a method.
         Dim myMethodBuilder As MethodBuilder = myTypeBuilder.DefineMethod("MyMethod", _
               MethodAttributes.Public, Nothing, New Type(1) {GetType(String), GetType(Integer)})
         Dim myILGenerator As ILGenerator = myMethodBuilder.GetILGenerator()
         myILGenerator.Emit(OpCodes.Ldarg_0)
         myILGenerator.Emit(OpCodes.Ldarg_1)
         myILGenerator.Emit(OpCodes.Stfld, myFieldBuilder)
         myILGenerator.EmitWriteLine("Value of the Field is :")
         myILGenerator.EmitWriteLine(myFieldBuilder)
         myILGenerator.Emit(OpCodes.Ret)

         Return myTypeBuilder.CreateType()
      End Function 'CreateCallee

      Public Shared Sub Main()
         Try
            Dim myCustomClass As Type = CreateCallee(Thread.GetDomain())
            ' Construct an instance of a type.
            Dim myObject As Object = Activator.CreateInstance(myCustomClass)
            Console.WriteLine("FieldBuilder Sample")
            ' Find a method in this type and call it on this object.
            Dim myMethodInfo As MethodInfo = myCustomClass.GetMethod("MyMethod")
            myMethodInfo.Invoke(myObject, New Object(1) {"Sample string", 3})
            ' Retrieve the values of Attributes applied to field and display to console.
            Dim myFieldInfo As FieldInfo() = myCustomClass.GetFields()
            Dim i As Integer
            For i = 0 To myFieldInfo.Length - 1
               Dim attributes As Object() = myFieldInfo(i).GetCustomAttributes(True)
               Dim index As Integer
               For index = 0 To attributes.Length - 1
                  If TypeOf attributes(index) Is MyAttribute1 Then
                     Dim myCustomAttribute As MyAttribute1 =  _
                                    CType(attributes(index), MyAttribute1)
                     Console.WriteLine("Attribute Value of (MyAttribute1): " _
                                    + myCustomAttribute.myCustomAttributeValue.ToString())
                  End If
                  If TypeOf attributes(index) Is MyAttribute2 Then
                     Dim myCustomAttribute As MyAttribute2 = _
                                    CType(attributes(index), MyAttribute2)
                     Console.WriteLine("Attribute Value of (MyAttribute2): " _
                                       + myCustomAttribute.myCustomAttributeValue.ToString())
                  End If
               Next index
            Next i
         Catch e as Exception
            Console.WriteLine("Exception Caught "+e.Message)
         End Try
      End Sub
   End Class
End Namespace 'MySample
开发者ID:VB.NET开发者,项目名称:System.Reflection.Emit,代码行数:109,代码来源:FieldBuilder.SetCustomAttribute


注:本文中的System.Reflection.Emit.FieldBuilder.SetCustomAttribute方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。