.NET类型的全限定名称不表现variance

链接:装配脑袋:[url=http://www.cnblogs.com/Ninputer/archive/2009/08/27/typename_parser.html]手工解析.NET完全限定类型名称[/url]

想起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对识别类型不重要,所以不必包括在名字里。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
通信相关 1.C#HttpHelper,Httpwebrequest,请求时无视编码,无视证书,无视Cookie,网页抓取 访问数据库相关 1.SqlHelper类 2.一个操作Sql2005数据库的类(备份,还原,分离,附加,添加删除用户等操作) 帮助类 1.最新的Functions 类 2.最新的 PageValidate 类 3.JavascriptHelp 4.最新的皮肤帮助类 UI_Misc_Helper JavaScript|Jquery相关 1.jQuery.cookie帮助类 访问系统相关 1.C#计算机信息类ComputerInfo 2.Api_Win32_Mac类工具包 3.在c#程序中放音乐的帮助类 GDI+相关,图像相关 1.生成缩略图的类文件SmallImage C#基础类库 1.Chart图形 Assistant创建显示图像的标签和文件 OWCChart统计图的封装类 2.Cookie&Session;&Cache;缓存帮助类 CacheHelper C#操作缓存的帮助类 CookieHelper C#操作Cookie的帮助类,添加,删除,修改,清理 SessionHelper C#关于Session的操作,获取,设置,删除 SessionHelper2 C#关于Session的一些高级操作,比如取对象,取数据等等 3.CSV文件转换 CsvHelper CSV文件导入DataTable和DataTable导出到Csv 4.DEncrypt 加密/解密帮助类 DEncrypt C# DEncrypt加密/解密帮助类 DESEncrypt Encrypt HashEncode MySecurity RSACryption 5.DLL COM.Excel.dll Excel.dll ICSharpCode.SharpZipLib.dll itextsharp.dll Microsoft.Office.Interop.Owc11.dll Microsoft.Web.UI.WebControls.dll OWC10Chart.dll 6.FTP操作类 FTPClient FTPHelper FTPOperater 7.JS操作类 JsHelper 8.JSON 转化类 ConvertJson List转成Json|对象转成Json|集合转成Json|DataSet转成Json|DataTable转成Json|DataReader转成Json等 9.Mime MediaTypes MimeEntity MimeHeaders MimeReader QuotedPrintableEncoding 10.PDF 转化类 PDFOperation 11.ResourceManager 操作类 AppMessage ResourceManager ResourceManagerWrapper Resources Sample.xml 12.XML操作类 XmlHelper XMLProcess 13.弹出消息类 MessageBox ShowMessageBox 14.导出Excel 操作类 DataToExcel ExcelHelper ExportExcel GridViewExport 15.分词辅助类 SegList 16.汉字转拼音 EcanConvertToCh PinYin 17.配置文件操作类 ConfigHelper 18.日历 CNDate 19.上传下载 DownLoadHelper FileDown FileUp UpLoadFiles 20.时间操作类 DateFormat TimeHelper TimeParser 21.视频转换类 VideoConvert 22.随机数类 BaseRandom RandomHelper RandomOperate 23.条形码 BarCodeToHTML 本类是个条码生成类,大家可根据需要自己设置,非常好用 24.图片 ImageClass ImageDown ImageUpload 25.网络 NetHelper 26.文件操作类 DirFile FileOperate INIFile 27.序列化 Serialize SerializeHelper 28.压缩解压缩 SharpZip 29.验证码 YZMHelper Captcha 验证码类,一个很个性的验证码类 30.页面辅助类 HTMLHelper UploadEventArgs JavaScriptPlus PageHelper 31.邮件 MailHelper MailPoper MailSender SmtpServerHelper 32.邮件2 ConnectCommand ConnectResponse DeleCommand ListCommand ListResponse MailHeaders MailMessageEx NoopCommand PassCommand Pop3Client Pop3Command Pop3Commands Pop3Exception Pop3ListItem Pop3Response Pop3Responses Pop3State QuitCommand RetrCommand RetrResponse RsetCommand Stat StatCommand StatResponse TopCommand UserCommand 33.正则表达式 RegexHelper 34.字符串 StringHelper 35.其它 BasePage BindDataControl ConvertHelper DataCache FormulaExpress GridViewHelper IpHelper MediaHandler PageValidate PicDeal QueryString Rmb StringPlus SysHelper Tools UrlOper Utility ValidateImg WebSitePathHelper
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值