ModuleBuilder.DefineEnum(String, TypeAttributes, Type) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Belirtilen türden adlı value__
tek bir statik olmayan alana sahip bir değer türü olan bir numaralandırma türü tanımlar.
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
Parametreler
- name
- String
Numaralandırma türünün tam yolu.
name
katıştırılmış null değerleri içeremez.
- visibility
- TypeAttributes
Sabit listesi için tür öznitelikleri. Öznitelikler tarafından VisibilityMasktanımlanan tüm bitlerdir.
- underlyingType
- Type
Sabit listesi için temel alınan tür. Bu yerleşik bir tamsayı türü olmalıdır.
Döndürülenler
Tanımlanan sabit listesi.
Özel durumlar
Görünürlük öznitelikleri dışındaki öznitelikler sağlanır.
-veya-
Bu modülün üst derlemesinde verilen ada sahip bir numaralandırma var.
-veya-
Görünürlük öznitelikleri numaralandırmanın kapsamıyla eşleşmiyor. Örneğin, NestedPublic için visibility
belirtilir, ancak numaralandırma iç içe geçmiş bir tür değildir.
name
, null
değeridir.
Örnekler
Aşağıdaki örnekte, dinamik modülde bir numaralandırma sınıfı uygulamak için kullanımı DefineEnum
gösterilmektedir. Örnek, temel alınan türü olan adlı Elevation
bir numaralandırma tanımlar ve iki öğe oluşturur: Low
0 değeriyle ve High
değeri 1 Int32olan . Tür oluşturulduktan sonra derleme adıyla TempAssembly.dll
kaydedilir. Bu derlemenin içeriğini incelemek için Ildasm.exe (IL Disassembler) kullanabilirsiniz.
Not
.NET Framework 2.0 sürümünden önce, bu kod örneği doğru bir numaralandırma oluşturmaz.
using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
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 = gcnew 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 Int32.
EnumBuilder^ eb =
mb->DefineEnum("Elevation", TypeAttributes::Public, int::typeid);
// Define two members, "High" and "Low".
eb->DefineLiteral("Low", (Object^) 0);
eb->DefineLiteral("High", 1);
// Create the type and save the assembly.
Type^ finished = eb->CreateType();
ab->Save(aName->Name + ".dll");
for each (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
*/
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
Açıklamalar
Tanımlı sabit listesi türetilmiş bir sınıfıdır Enum. alanında value__
Private ve SpecialName öznitelikleri ayarlanmıştır.
Temel alınan numaralandırma türleri olarak belirtilebilen yerleşik tamsayı türleri hakkında daha fazla bilgi için bkz. Sınıf Kitaplığına Genel Bakış.
Not
.NET Framework sürüm 1.0 ve 1.1'de, numaralandırma türü yerine öğeleri türünde Int32 olan sabit listeleri yaydığından EnumBuilder kullanarak numaralandırmaları tanımlamak TypeBuilder gerekir. .NET Framework sürüm 2.0'da, EnumBuilder öğeleri doğru türe sahip numaralandırmalar yayar.
Not
.NET Framework 2.0 Service Pack 1'den başlayarak, bu üye artık bayrağını ReflectionPermissionFlag.ReflectionEmit gerektirmezReflectionPermission. (Bkz. Yansıma Yaymada Güvenlik Sorunları.) Bu işlevselliği kullanmak için uygulamanızın .NET Framework 3.5 veya sonraki bir sürümü hedeflemesi gerekir.