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

Tanım

Belirtilen türde adlı value__ tek bir statik olmayan alana sahip bir değer türü olan bir numaralandırma türünü 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 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 yerleştirilmiş bir tür değildir.

name, null'e eşittir.

Örnekler

Aşağıdaki örnekte, bir sabit listesi sınıfını dinamik modülde 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ğerine sahip , 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.

Note

.NET Framework 2.0 sürümünden önce, bu kod örneği doğru bir numaralandırma üretmez.

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ımlanan sabit listesi, türetilmiş bir sınıfıdır Enum. alanında value__Private ve SpecialName öznitelikleri ayarlanmıştır.

Temel alınan sabit listesi türleri olarak belirtilebilen yerleşik tamsayı türleri hakkında daha fazla bilgi için bkz. Sınıf Kitaplığına Genel Bakış.

Note

.NET Framework 1.0 ve 1.1 sürümlerinde, EnumBuilder öğeleri numaralandırma türü yerine Int32 türünde olan numaralandırmalar yaydığından, TypeBuilder kullanarak numaralandırmalar tanımlamak gerekir. .NET Framework sürüm 2.0'da EnumBuilder öğeleri doğru türe sahip numaralandırmalar yayar.

Şunlara uygulanır