我是靠谱客的博主 高贵柠檬,最近开发中收集的这篇文章主要介绍动态创建枚举,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  在程序运行时动态建立枚举类型及其包含的枚举项.这样我们就可以把枚举项放在web.config这样的xml文件中.便于随时更新,同时还不用重新编译程序.
      这里,我们要用到System.Reflection.Emit 命名空间.它提供了EnumBuilder类,用来在运行是动态建立枚举类型.
       (Emit空间中还包含了许多其他Builder类,方便大家在程序运行时建立"程序集","类","事件"等等)
      

EnumBuilder 类 说明并表示枚举类型。
命名空间: System.Reflection.Emit
程序集: 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

最后

以上就是高贵柠檬为你收集整理的动态创建枚举的全部内容,希望文章能够帮你解决动态创建枚举所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部