FieldBuilder.SetCustomAttribute Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Anger ett anpassat attribut.
Överlagringar
| Name | Description |
|---|---|
| SetCustomAttribute(CustomAttributeBuilder) |
Anger ett anpassat attribut med hjälp av en anpassad attributbyggare. |
| SetCustomAttribute(ConstructorInfo, Byte[]) |
Anger ett anpassat attribut med en angiven anpassad attributblob. |
SetCustomAttribute(CustomAttributeBuilder)
- Källa:
- FieldBuilder.cs
- Källa:
- FieldBuilder.cs
- Källa:
- FieldBuilder.cs
- Källa:
- FieldBuilder.cs
- Källa:
- FieldBuilder.cs
Anger ett anpassat attribut med hjälp av en anpassad attributbyggare.
public:
void SetCustomAttribute(System::Reflection::Emit::CustomAttributeBuilder ^ customBuilder);
public void SetCustomAttribute(System.Reflection.Emit.CustomAttributeBuilder customBuilder);
member this.SetCustomAttribute : System.Reflection.Emit.CustomAttributeBuilder -> unit
Public Sub SetCustomAttribute (customBuilder As CustomAttributeBuilder)
Parametrar
- customBuilder
- CustomAttributeBuilder
En instans av en hjälpklass för att definiera det anpassade attributet.
Undantag
customBuilder är null.
Den överordnade typen av fält är klar.
Exempel
Följande kodexempel illustrerar användningen av SetCustomAttribute i kontexten för , med hjälp av FieldBuilderen CustomAttributeBuilder.
using System;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;
namespace MySample
{
[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
public class MyAttribute1 :Attribute
{
public string myCustomAttributeValue;
public MyAttribute1(string myString)
{
myCustomAttributeValue = myString;
}
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
public class MyAttribute2 :Attribute
{
public bool myCustomAttributeValue;
public MyAttribute2(bool myBool)
{
myCustomAttributeValue = myBool;
}
}
class FieldBuilder_Sample
{
private static Type CreateCallee(AppDomain currentDomain)
{
// Create a simple name for the assembly.
AssemblyName myAssemblyName = new AssemblyName();
myAssemblyName.Name = "EmittedAssembly";
// Create the called dynamic assembly.
AssemblyBuilder myAssemblyBuilder =
currentDomain.DefineDynamicAssembly(myAssemblyName, AssemblyBuilderAccess.RunAndSave);
ModuleBuilder myModuleBuilder =
myAssemblyBuilder.DefineDynamicModule("EmittedModule","EmittedModule.mod");
// Define a public class named 'CustomClass' in the assembly.
TypeBuilder myTypeBuilder = myModuleBuilder.DefineType("CustomClass",
TypeAttributes.Public);
// Define a private String field named 'MyField' in the type.
FieldBuilder myFieldBuilder =
myTypeBuilder.DefineField("MyField", typeof(String), FieldAttributes.Public);
Type myAttributeType1 = typeof(MyAttribute1);
// Create a Constructorinfo object for attribute 'MyAttribute1'.
ConstructorInfo myConstructorInfo = myAttributeType1.GetConstructor(
new Type[1]{typeof(string)});
// Create the CustomAttribute instance of attribute of type 'MyAttribute1'.
CustomAttributeBuilder attributeBuilder =
new CustomAttributeBuilder( myConstructorInfo,new object[1]{"Test"});
// Set the CustomAttribute 'MyAttribute1' to the Field.
myFieldBuilder.SetCustomAttribute(attributeBuilder);
Type myAttributeType2 = typeof(MyAttribute2);
// Create a Constructorinfo object for attribute 'MyAttribute2'.
ConstructorInfo myConstructorInfo2 = myAttributeType2.GetConstructor(
new Type[1]{typeof(bool)});
// Set the CustomAttribute 'MyAttribute2' to the Field.
myFieldBuilder.SetCustomAttribute(myConstructorInfo2,new byte[]{01,00,01,00,00});
// Create a method.
MethodBuilder myMethodBuilder= myTypeBuilder.DefineMethod("MyMethod",
MethodAttributes.Public,null,new Type[2]{typeof(string),typeof(int)});
ILGenerator myILGenerator = 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();
}
public static void Main()
{
try
{
Type myCustomClass = CreateCallee(Thread.GetDomain());
// Construct an instance of a type.
Object myObject = Activator.CreateInstance(myCustomClass);
Console.WriteLine( "FieldBuilder Sample");
// Find a method in this type and call it on this object.
MethodInfo myMethodInfo = myCustomClass.GetMethod("MyMethod");
myMethodInfo.Invoke(myObject, new object[2]{"Sample string",3});
// Retrieve the values of Attributes applied to field and display to console.
FieldInfo[] myFieldInfo = myCustomClass.GetFields();
for(int i =0;i<myFieldInfo.Length;i++)
{
object[] attributes = myFieldInfo[i].GetCustomAttributes(true);
for(int index=0; index < attributes.Length; index++)
{
if(attributes[index] is MyAttribute1)
{
MyAttribute1 myCustomAttribute = (MyAttribute1)attributes[index];
Console.WriteLine("Attribute Value of (MyAttribute1): "
+ myCustomAttribute.myCustomAttributeValue);
}
if(attributes[index] is MyAttribute2)
{
MyAttribute2 myCustomAttribute = (MyAttribute2)attributes[index];
Console.WriteLine("Attribute Value of (MyAttribute2): "
+ myCustomAttribute.myCustomAttributeValue);
}
}
}
}
catch (Exception e)
{
Console.WriteLine("Exception Caught "+e.Message);
}
}
}
}
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
Gäller för
SetCustomAttribute(ConstructorInfo, Byte[])
- Källa:
- FieldBuilder.cs
- Källa:
- FieldBuilder.cs
- Källa:
- FieldBuilder.cs
- Källa:
- FieldBuilder.cs
- Källa:
- FieldBuilder.cs
Anger ett anpassat attribut med en angiven anpassad attributblob.
public:
void SetCustomAttribute(System::Reflection::ConstructorInfo ^ con, cli::array <System::Byte> ^ binaryAttribute);
public void SetCustomAttribute(System.Reflection.ConstructorInfo con, byte[] binaryAttribute);
[System.Runtime.InteropServices.ComVisible(true)]
public void SetCustomAttribute(System.Reflection.ConstructorInfo con, byte[] binaryAttribute);
member this.SetCustomAttribute : System.Reflection.ConstructorInfo * byte[] -> unit
[<System.Runtime.InteropServices.ComVisible(true)>]
member this.SetCustomAttribute : System.Reflection.ConstructorInfo * byte[] -> unit
Public Sub SetCustomAttribute (con As ConstructorInfo, binaryAttribute As Byte())
Parametrar
- con
- ConstructorInfo
Konstruktorn för det anpassade attributet.
- binaryAttribute
- Byte[]
En byteblob som representerar attributen.
- Attribut
Undantag
con eller binaryAttribute är null.
Den överordnade typen av fält är klar.
Exempel
Följande kodexempel illustrerar användningen av SetCustomAttribute i kontexten för , med hjälp av FieldBuilderen byteblob.
using System;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;
namespace MySample
{
[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
public class MyAttribute1 :Attribute
{
public string myCustomAttributeValue;
public MyAttribute1(string myString)
{
myCustomAttributeValue = myString;
}
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
public class MyAttribute2 :Attribute
{
public bool myCustomAttributeValue;
public MyAttribute2(bool myBool)
{
myCustomAttributeValue = myBool;
}
}
class FieldBuilder_Sample
{
private static Type CreateCallee(AppDomain currentDomain)
{
// Create a simple name for the assembly.
AssemblyName myAssemblyName = new AssemblyName();
myAssemblyName.Name = "EmittedAssembly";
// Create the called dynamic assembly.
AssemblyBuilder myAssemblyBuilder =
currentDomain.DefineDynamicAssembly(myAssemblyName, AssemblyBuilderAccess.RunAndSave);
ModuleBuilder myModuleBuilder =
myAssemblyBuilder.DefineDynamicModule("EmittedModule","EmittedModule.mod");
// Define a public class named 'CustomClass' in the assembly.
TypeBuilder myTypeBuilder = myModuleBuilder.DefineType("CustomClass",
TypeAttributes.Public);
// Define a private String field named 'MyField' in the type.
FieldBuilder myFieldBuilder =
myTypeBuilder.DefineField("MyField", typeof(String), FieldAttributes.Public);
Type myAttributeType1 = typeof(MyAttribute1);
// Create a Constructorinfo object for attribute 'MyAttribute1'.
ConstructorInfo myConstructorInfo = myAttributeType1.GetConstructor(
new Type[1]{typeof(string)});
// Create the CustomAttribute instance of attribute of type 'MyAttribute1'.
CustomAttributeBuilder attributeBuilder =
new CustomAttributeBuilder( myConstructorInfo,new object[1]{"Test"});
// Set the CustomAttribute 'MyAttribute1' to the Field.
myFieldBuilder.SetCustomAttribute(attributeBuilder);
Type myAttributeType2 = typeof(MyAttribute2);
// Create a Constructorinfo object for attribute 'MyAttribute2'.
ConstructorInfo myConstructorInfo2 = myAttributeType2.GetConstructor(
new Type[1]{typeof(bool)});
// Set the CustomAttribute 'MyAttribute2' to the Field.
myFieldBuilder.SetCustomAttribute(myConstructorInfo2,new byte[]{01,00,01,00,00});
// Create a method.
MethodBuilder myMethodBuilder= myTypeBuilder.DefineMethod("MyMethod",
MethodAttributes.Public,null,new Type[2]{typeof(string),typeof(int)});
ILGenerator myILGenerator = 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();
}
public static void Main()
{
try
{
Type myCustomClass = CreateCallee(Thread.GetDomain());
// Construct an instance of a type.
Object myObject = Activator.CreateInstance(myCustomClass);
Console.WriteLine( "FieldBuilder Sample");
// Find a method in this type and call it on this object.
MethodInfo myMethodInfo = myCustomClass.GetMethod("MyMethod");
myMethodInfo.Invoke(myObject, new object[2]{"Sample string",3});
// Retrieve the values of Attributes applied to field and display to console.
FieldInfo[] myFieldInfo = myCustomClass.GetFields();
for(int i =0;i<myFieldInfo.Length;i++)
{
object[] attributes = myFieldInfo[i].GetCustomAttributes(true);
for(int index=0; index < attributes.Length; index++)
{
if(attributes[index] is MyAttribute1)
{
MyAttribute1 myCustomAttribute = (MyAttribute1)attributes[index];
Console.WriteLine("Attribute Value of (MyAttribute1): "
+ myCustomAttribute.myCustomAttributeValue);
}
if(attributes[index] is MyAttribute2)
{
MyAttribute2 myCustomAttribute = (MyAttribute2)attributes[index];
Console.WriteLine("Attribute Value of (MyAttribute2): "
+ myCustomAttribute.myCustomAttributeValue);
}
}
}
}
catch (Exception e)
{
Console.WriteLine("Exception Caught "+e.Message);
}
}
}
}
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
Kommentarer
Information om hur du formaterar binaryAttributefinns i metadataspecifikationen i partition II i CLI-specifikationen (Common Language Infrastructure).