您的位置:首页 > 其它

关于.net中IL语言的一个应用场景 2014-2-10 17:15 阅读(0)

2014-02-10 17:19 246 查看

首先,不得不承认,我们很少需要IL语言,但有时使用IL语言会让你的设计变得很合理,当然,如果对IL这种语言有抵触的可以绕道。

在实际编程中,有许多变量的值可能来自于一组已知的值,同时又提供必要的自定义值,以提供扩充可能,基于此种需求,打算设计一个String<T>类,其中范型参数为一枚举变量,该类提供字符串与枚举量两种构造方式(我不想为每个可能的对象都编写一个类,我只想定义一个枚举,如果要定义类的可以绕道)。残酷的是C#不支持定义一个范型,其参数来自Enum的约束,后来又偿试了托管C++,很遗憾,继续不提供支持。对于其它托管语言,没有进一步去偿试,果断选作IL作为这个类的开发语言,其示例代码如下:

.class
public
auto
ansi
beforefieldinit String`1<([mscorlib]System.Enum)T>

extends[mscorlib]System.Object

{

.field
public
string _value

.method
public
hidebysig
specialname
rtspecialname

instance
void
.ctor(string
v) cil
managed

{

//
代码大小 24 (0x18)

.maxstack
8

IL_0000:
ldarg.0

IL_0001:
ldnull

IL_0002:
stfld
string
class Inm.Text.String`1<!T>::_value

IL_0007:
ldarg.0

IL_0008:
call
instance
void[mscorlib]System.Object::.ctor()

IL_000d:
nop

IL_000e:
nop

IL_000f:
ldarg.0

IL_0010:
ldarg.1

IL_0011:
stfld
string
class Inm.Text.String`1<!T>::_value

IL_0016:
nop

IL_0017:
ret

}
//end of method String`1::.ctor

}

编译成DLL后,经C#调用,完美解决问题。

(大部分IL代码可以通过先编写相关的C#类经反射生成,其它的代码可经VS的一个扩展ILSupport编写,目前该扩展只支持到VS2012,要想支持VS2013,需修改VSIX安装文件中的vsixmanifast文件)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: