ModuleBuilder.DefineEnum(String, TypeAttributes, Type) Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Olyan enumerálási típust határoz meg, amely egy értéktípus, amelynek egyetlen, nem statikus mezőjét a megadott típusnak hívják value__ .
public:
System::Reflection::Emit::EnumBuilder ^ DefineEnum(System::String ^ name, System::Reflection::TypeAttributes visibility, Type ^ underlyingType);
public System.Reflection.Emit.EnumBuilder DefineEnum(string name, System.Reflection.TypeAttributes visibility, Type underlyingType);
member this.DefineEnum : string * System.Reflection.TypeAttributes * Type -> System.Reflection.Emit.EnumBuilder
Public Function DefineEnum (name As String, visibility As TypeAttributes, underlyingType As Type) As EnumBuilder
Paraméterek
- name
- String
Az enumerálási típus teljes elérési útja.
name nem tartalmazhat beágyazott null értékeket.
- visibility
- TypeAttributes
Az enumerálás típusattribútumai. Az attribútumok a bitek által definiált VisibilityMaskbitek.
- underlyingType
- Type
Az enumerálás alapjául szolgáló típus. Ennek beépített egész számtípusnak kell lennie.
Válaszok
A definiált enumerálás.
Kivételek
A láthatósági attribútumokon kívül más attribútumok is rendelkezésre állnak.
-vagy-
A modul szülőszerelvényében a megadott névvel rendelkező enumerálás létezik.
-vagy-
A láthatósági attribútumok nem felelnek meg az enumerálás hatókörének. Például NestedPublic meg van adva visibility, de az enumerálás nem beágyazott típus.
name az null.
Példák
Az alábbi példa egy enumerálási osztály dinamikus modulban való implementálását DefineEnum mutatja be. A példa egy olyan enumerálást Elevation határoz meg, amelynek egy mögöttes típusa Int32van, és két elemet hoz létre: Low0 értékkel és High1 értékkel. A típus létrehozása után a rendszer a szerelvényt a névvel TempAssembly.dllmenti. A Ildasm.exe (IL-szétszerelő) segítségével megvizsgálhatja a szerelvény tartalmát.
Note
A .NET-keretrendszer 2.0-s verziója előtt ez a példa nem hoz létre helyes számbavételt.
using System;
using System.Reflection;
using System.Reflection.Emit;
class Example
{
public static void Main()
{
// Get the current application domain for the current thread.
AppDomain currentDomain = AppDomain.CurrentDomain;
// Create a dynamic assembly in the current application domain,
// and allow it to be executed and saved to disk.
AssemblyName aName = new AssemblyName("TempAssembly");
AssemblyBuilder ab = currentDomain.DefineDynamicAssembly(
aName, AssemblyBuilderAccess.RunAndSave);
// Define a dynamic module in "TempAssembly" assembly. For a single-
// module assembly, the module has the same name as the assembly.
ModuleBuilder mb = ab.DefineDynamicModule(aName.Name, aName.Name + ".dll");
// Define a public enumeration with the name "Elevation" and an
// underlying type of Integer.
EnumBuilder eb = mb.DefineEnum("Elevation", TypeAttributes.Public, typeof(int));
// Define two members, "High" and "Low".
eb.DefineLiteral("Low", 0);
eb.DefineLiteral("High", 1);
// Create the type and save the assembly.
Type finished = eb.CreateType();
ab.Save(aName.Name + ".dll");
foreach( object o in Enum.GetValues(finished) )
{
Console.WriteLine("{0}.{1} = {2}", finished, o, ((int) o));
}
}
}
/* This code example produces the following output:
Elevation.Low = 0
Elevation.High = 1
*/
Imports System.Reflection
Imports System.Reflection.Emit
Module Example
Sub Main()
' Get the current application domain for the current thread.
Dim currentDomain As AppDomain = AppDomain.CurrentDomain
' Create a dynamic assembly in the current application domain,
' and allow it to be executed and saved to disk.
Dim aName As AssemblyName = New AssemblyName("TempAssembly")
Dim ab As AssemblyBuilder = currentDomain.DefineDynamicAssembly( _
aName, AssemblyBuilderAccess.RunAndSave)
' Define a dynamic module in "TempAssembly" assembly. For a single-
' module assembly, the module has the same name as the assembly.
Dim mb As ModuleBuilder = _
ab.DefineDynamicModule(aName.Name, aName.Name & ".dll")
' Define a public enumeration with the name "Elevation" and an
' underlying type of Integer.
Dim eb As EnumBuilder = _
mb.DefineEnum("Elevation", TypeAttributes.Public, GetType(Integer))
' Define two members, "High" and "Low".
eb.DefineLiteral("Low", 0)
eb.DefineLiteral("High", 1)
' Create the type and save the assembly.
Dim finished As Type = eb.CreateType()
ab.Save(aName.Name & ".dll")
For Each o As Object In [Enum].GetValues(finished)
Console.WriteLine("{0}.{1} = {2}", finished, o, CInt(o))
Next
End Sub
End Module
' This code example produces the following output:
'
'Elevation.Low = 0
'Elevation.High = 1
Megjegyzések
A definiált enumerálás a következő származtatott osztálya Enum: . A value__ mező rendelkezik Private és SpecialName attribútumok vannak beállítva.
Az enumerálások alapjául szolgáló típusként megadható beépített egész számtípusokról az Osztálytár áttekintése című témakörben talál további információt.
Note
Az .NET Framework 1.0-s és 1.1-es verzióiban enumerálásokat kell definiálni TypeBuilder használatával, mert EnumBuilder enumerálásokat bocsát ki, amelyek elemei Int32 típusúak az enumerálási típus helyett. A .NET Framework 2.0-s verziójában a EnumBuilder olyan enumerálásokat bocsát ki, amelyek elemei a megfelelő típusúak.