Aracılığıyla paylaş


ModuleBuilder.DefineEnum(String, TypeAttributes, Type) Yöntem

Tanım

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 visibilitybelirtilir, 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: Low0 değeriyle ve Highdeğeri 1 Int32olan . Tür oluşturulduktan sonra derleme adıyla TempAssembly.dllkaydedilir. 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.

Şunlara uygulanır