链接:装配脑袋:
手工解析.NET完全限定类型名称
想起CLR 2.0开始支持variance,在MSIL里声明泛型接口或者委托时可以在泛型参数前加上+或者-来表示covariance和contravariance。全限定名称里包含了泛型参数的信息,感觉也应该包含variance信息。
实验如下:
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 )
.ver 2:0:0:0
}
.assembly variance
{
.hash algorithm 0x00008004
.ver 0:0:0:0
}
.module variance.exe
.class interface public abstract auto ansi IFoo`1<+T>
{
}
.class public auto ansi beforefieldinit Foo`1<T>
extends [mscorlib]System.Object
implements class IFoo`1<!T>
{
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: ret
}
}
.class private abstract auto ansi sealed beforefieldinit Program
extends [mscorlib]System.Object
{
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
.maxstack 2
.locals init (class Foo`1<int32> V_0,
class [mscorlib]System.Type[] V_1,
class [mscorlib]System.Type V_2,
class [mscorlib]System.Type[] V_3,
int32 V_4,
bool V_5)
IL_0000: nop
IL_0001: ldtoken IFoo`1
IL_0006: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
IL_000b: call void [mscorlib]System.Console::WriteLine(object)
IL_0010: nop
IL_0011: newobj instance void class Foo`1<int32>::.ctor()
IL_0016: stloc.0
IL_0017: ldloc.0
IL_0018: call void [mscorlib]System.Console::WriteLine(object)
IL_001d: nop
IL_001e: ldloc.0
IL_001f: callvirt instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
IL_0024: callvirt instance class [mscorlib]System.Type[] [mscorlib]System.Type::GetInterfaces()
IL_0029: stloc.1
IL_002a: nop
IL_002b: ldloc.1
IL_002c: stloc.3
IL_002d: ldc.i4.0
IL_002e: stloc.s V_4
IL_0030: br.s IL_0046
IL_0032: ldloc.3
IL_0033: ldloc.s V_4
IL_0035: ldelem.ref
IL_0036: stloc.2
IL_0037: nop
IL_0038: ldloc.2
IL_0039: call void [mscorlib]System.Console::WriteLine(object)
IL_003e: nop
IL_003f: nop
IL_0040: ldloc.s V_4
IL_0042: ldc.i4.1
IL_0043: add
IL_0044: stloc.s V_4
IL_0046: ldloc.s V_4
IL_0048: ldloc.3
IL_0049: ldlen
IL_004a: conv.i4
IL_004b: clt
IL_004d: stloc.s V_5
IL_004f: ldloc.s V_5
IL_0051: brtrue.s IL_0032
IL_0053: ret
}
}
结果:
IFoo`1[T]
Foo`1[System.Int32]
IFoo`1[System.Int32]
IFoo<>也没有显示出定义时的加号。看来variance对识别类型不重要,所以不必包括在名字里。
分享到:
相关推荐
You’ll find new chapters covering the important concepts of dynamic lookups, named and optional arguments, Parallel LINQ (PLINQ), improved COM interop, and variance for generics. If you’re ...
the book also covers traditional Windows programming, Windows Forms, GDI+, and ASP.NET Web programming with C# Addresses additional topics such as: base class libraries, communication with enterprise...
You’ll find new chapters covering the important concepts of dynamic lookups, named and optional arguments, Parallel LINQ (PLINQ), improved COM interop, and variance for generics. If you’re ...
Variance Shadow Maps
Variance Swap很好的研究报告
Estimator Bias and Variance of Estimator Parallel Universes Variance Bias Model Selection
Bias-variance decomposition 偏置方差分解推导
机器学习中的bias和variance解释,英文ppt 非常重要的概念
Variance reduction techniques and quasi-Monte Carlo methods ☆
基于opengl3.3以上版本的variance shadow map.
Introduction to Variance Estimation - 2nd Edition - 2007
Least-squares variance component estimation - Theory and GPS applications
X. Y. Zhou and D. Li, Continuous time mean-variance portfolio selection: A stochastic LQ framework, Appl. Math. Optim., 42(2000), pp. 19-33.
Generic Variance java 源码
java Array Variance 方法
对原始的钟差数据处理,将其转化为频率数据,通过频率数据求阿伦方差,来分别求解卫星钟的千秒稳,万秒稳,天稳,从而对卫星钟性能进行分析。
Massaging mean-variance inputs Returns from alternative investment.pdfMassaging mean-variance inputs Returns from alternative investment.pdf
variance7.in
Some code to produce an Allan Variance plot of IMU data. The program source code is ISO C++98.
Basak and G. Chabakauri, Dynamic mean-variance asset allocation, Rev. Financ. Studies, 23(2010), pp. 2970-3016.