概述
在程序运行时动态建立枚举类型及其包含的枚举项.这样我们就可以把枚举项放在web.config这样的xml文件中.便于随时更新,同时还不用重新编译程序.
这里,我们要用到System.Reflection.Emit 命名空间.它提供了EnumBuilder类,用来在运行是动态建立枚举类型.
(Emit空间中还包含了许多其他Builder类,方便大家在程序运行时建立"程序集","类","事件"等等)
EnumBuilder 类 说明并表示枚举类型。
命名空间: System.Reflection.Emit
程序集: mscorlib(在 mscorlib.dll 中)
程序集: mscorlib(在 mscorlib.dll 中)
下面的代码示例演示了如何在动态程序集中使用 EnumBuilder 构造枚举。该示例定义一个名为 Elevation 的枚举,其基础类型为 Int32,并且创建两个元素:值为 0 的 Low 和值为 1 的 High。创建完类型后,使用 TempAssembly.dll 名称来保存程序集。可以使用
MSIL 反汇编程序 (Ildasm.exe)检查此程序集的内容。
下面是具体的代码实现:
using System;
using System.Reflection;
using System.Reflection.Emit;
class Example
{
public static void Main()
{
//
在当前的线程下获取当前应用程序的域
.
AppDomain currentDomain = AppDomain.CurrentDomain;
//
在当前应用程序的域
.
内创建一个动态程序集
//
并且允许到磁盘上
AssemblyName aName = new AssemblyName("TempAssembly");
AssemblyBuilder ab = currentDomain.DefineDynamicAssembly(
aName, AssemblyBuilderAccess.RunAndSave);
//
在
"TempAssembly"
程序集下创建一个动态模块这个模块和程序集具有相同的名字
ModuleBuilder mb = ab.DefineDynamicModule(aName.Name, aName.Name + ".dll");
//
定义一个名为
"Elevation"
的枚举型值
EnumBuilder eb = mb.DefineEnum("Elevation", TypeAttributes.Public, typeof(int));
//定义两个成员, "High" 和 "Low".
eb.DefineLiteral("Low", 0);
eb.DefineLiteral("High", 1);
//
创建类型兵保存程序集
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));
}
}
}
/*
下面是一个调用的例子
Elevation.Low = 0
Elevation.High = 1
转载于:https://blog.51cto.com/joselee/788699
最后
以上就是高贵柠檬为你收集整理的动态创建枚举的全部内容,希望文章能够帮你解决动态创建枚举所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复