FieldBuilder.SetCustomAttribute Method
Microsoft Silverlight will reach end of support after October 2021. Learn more.
Sets a custom attribute using a custom attribute builder.
Namespace: System.Reflection.Emit
Assembly: mscorlib (in mscorlib.dll)
Syntax
'Declaration
<SecuritySafeCriticalAttribute> _
Public Sub SetCustomAttribute ( _
customBuilder As CustomAttributeBuilder _
)
[SecuritySafeCriticalAttribute]
public void SetCustomAttribute(
CustomAttributeBuilder customBuilder
)
Parameters
- customBuilder
Type: System.Reflection.Emit.CustomAttributeBuilder
An instance of a helper class to define the custom attribute.
Exceptions
Exception | Condition |
---|---|
ArgumentNullException | con is nulla null reference (Nothing in Visual Basic). |
InvalidOperationException | The parent type of this field is complete. |
Examples
The following code sample illustrates the use of SetCustomAttribute in the context of FieldBuilder, using a CustomAttributeBuilder.
Note: |
---|
To run this example, see Building Examples That Use a Demo Method and a TextBlock Control. |
Imports System.Reflection
Imports System.Reflection.Emit
<AttributeUsage(AttributeTargets.All, AllowMultiple:=False)> _
Public Class MyAttribute
Inherits Attribute
Private myStringValue As String
Public ReadOnly Property MyString As String
Get
Return myStringValue
End Get
End Property
Public Sub New(ByVal myString As String)
myStringValue = myString
End Sub
End Class
Public Class Example
Public Shared Sub Demo(ByVal outputBlock As System.Windows.Controls.TextBlock)
' Create a name for the assembly.
Dim myAssemblyName As New AssemblyName("EmittedAssembly")
' Create the dynamic assembly in the current application domain.
Dim myAssemblyBuilder As AssemblyBuilder = _
AppDomain.CurrentDomain.DefineDynamicAssembly(myAssemblyName, _
AssemblyBuilderAccess.Run)
Dim myModuleBuilder As ModuleBuilder = _
myAssemblyBuilder.DefineDynamicModule("EmittedModule")
' 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)
' To set a custom attribute, first get the constructor for the attribute.
' Use the constructor and an array of arguments for the constructor to
' create a CustomAttributeBuilder. Finally, use the CustomAttributeBuilder
' to set the attribute on the enumeration.
Dim myAttributeType As Type = GetType(MyAttribute)
Dim myConstructorInfo As ConstructorInfo = _
myAttributeType.GetConstructor(New Type() {GetType(String)})
Dim attributeBuilder As _
New CustomAttributeBuilder(myConstructorInfo, New Object() {"Test"})
myFieldBuilder.SetCustomAttribute(attributeBuilder)
Try
Dim myCustomClass As Type = myTypeBuilder.CreateType()
' Retrieve the values of Attributes applied to field and display them.
Dim myFieldInfo As FieldInfo = myCustomClass.GetField("MyField")
For Each attr As Object In myFieldInfo.GetCustomAttributes(True)
outputBlock.Text &= attr.ToString() & vbCrLf
If TypeOf attr Is MyAttribute Then
outputBlock.Text &= String.Format(" MyString: {0}" & vbCrLf, _
CType(attr, MyAttribute).MyString.ToString())
End If
Next
Catch e As Exception
outputBlock.Text &= "Exception Caught " + e.Message & vbCrLf
End Try
End Sub
End Class
' This example produces output similar to the following:
'
'SilverlightApplication.MyAttribute
' MyString: Test
using System;
using System.Reflection;
using System.Reflection.Emit;
[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
public class MyAttribute : Attribute
{
private string myStringValue;
public string MyString { get { return myStringValue; }}
public MyAttribute(string myString)
{
myStringValue = myString;
}
}
class Example
{
public static void Demo(System.Windows.Controls.TextBlock outputBlock)
{
// Create a simple name for the assembly.
AssemblyName myAssemblyName = new AssemblyName("EmittedAssembly");
// Create the dynamic assembly.
AssemblyBuilder myAssemblyBuilder =
AppDomain.CurrentDomain.DefineDynamicAssembly(
myAssemblyName, AssemblyBuilderAccess.Run);
ModuleBuilder myModuleBuilder =
myAssemblyBuilder.DefineDynamicModule("EmittedModule");
// 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);
// To set a custom attribute, first get the constructor for the attribute.
// Use the constructor and an array of arguments for the constructor to
// create a CustomAttributeBuilder. Finally, use the CustomAttributeBuilder
// to set the attribute on the enumeration.
Type myAttributeType = typeof(MyAttribute);
ConstructorInfo myConstructorInfo =
myAttributeType.GetConstructor(new Type[] { typeof(string) });
CustomAttributeBuilder attributeBuilder =
new CustomAttributeBuilder(myConstructorInfo, new object[] { "Test" });
myFieldBuilder.SetCustomAttribute(attributeBuilder);
Type myCustomClass = myTypeBuilder.CreateType();
// Retrieve the values of Attributes applied to field and display to console.
FieldInfo myFieldInfo = myCustomClass.GetField("MyField");
foreach (object attr in myFieldInfo.GetCustomAttributes(true))
{
outputBlock.Text += attr.ToString() + "\n";
if (attr is MyAttribute)
{
outputBlock.Text += String.Format(" MyString: {0}\n",
((MyAttribute) attr).MyString.ToString());
}
}
}
}
/* This example produces output similar to the following:
MyAttribute
MyString: Test
*/
Version Information
Silverlight
Supported in: 5, 4, 3
Platforms
For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.