关于.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文件)
首先,不得不承认,我们很少需要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文件)
相关文章推荐
- 关于一个服务上面多个应用的场景
- .Net语言 APP开发平台——Smobiler学习日志:Poplist控件在APP中的应用场景以及代码
- zoj3195(一个关于LCA的应用,三个节点)
- 【Python】笔记简记--029:关于读写文件的一个应用项目
- .NET之RabbitMQ学习笔记(一)-应用场景
- .NET关于string转换的一个小Bug
- 使用java语言基础部分知识,做一个简易的2个数之间的关于算术运算符的计算。
- .NET 中关于反射的应用 (C#)
- 关于.Net 1.1 Windows Forms 控件的一个小问题
- RunLoop的应用场景---关于滑动tableView的时候NSTimer 暂停的问题
- 一个小小的简单计算器问题,有关于栈的应用
- 关于注册表应用我有一个问题,望不吝赐教,谢谢
- 一起谈.NET技术,关于大型ASP.NET应用系统的架构—如何做到高性能高可伸缩性
- 弱引用和软引用WeakReference,SoftReference,最简讲解,以及一个应用场景
- 关于支持向量机(SVM)的一个简单应用实例及matlab代码
- .Net 中的IL中间语言基本语法
- 一个关于时间的静态变量的应用
- PHP接口的概念跟接口语言与接口的应用场景
- 推荐一个很好的关于.net的BLOG
- 2017-6-14 关于使用history.go的问题!配合原生应用嵌入H5页面(只有一个webview的的单页应用)返回历史列表记录的问题