How can Type int[] implement interfaces that do not yet exist (for me)?
今天我在Visual Studio 2010(.NET Framework 4.0版)中测试了以下代码
1 |
我很震惊地发现这两个在名单上:
System.Collections.Generic.IReadOnlyList`1[[System.Int32, mscorlib,
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]],
mscorlib, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089System.Collections.Generic.IReadOnlyCollection`1[[System.Int32,
mscorlib, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089
我以前在安装了框架4.5+的环境中使用过这两个接口,根据文档,这两个接口都是为4.5创建的。这不会在我的环境中编译:
1 |
The type or namespace name 'IReadOnlyCollection' does not exist in the
namespace 'System.Collections.Generic' (are you missing an assembly
reference?)
当我尝试这个的时候:
1 2 3 | int[] array = new int[3]; Type iReadOnlyCollection = Type.GetType("System.Collections.Generic.IReadOnlyCollection`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"); int count = (int)iReadOnlyCollection.GetProperty("Count").GetValue(array, null); |
如预期,
编辑:我认为我的计算机上没有安装框架4.5:
编辑2:谢谢@scottchamberlain,原来是我安装的。
在.NET 4.5是一个灌注for .NET 4更新。这意味着,当你在Visual Studio .NET 4参考
在您的代码尝试运行环境,你不要有更新(IU,只是.NET 4.5 4.0)和代码不会找到的接口类型。IU,
你编译为.NET 4.0,所以4.5-specific湖泊类型不是由编译器。
你运行在.NET 4.5或4.6,这是由运行时4.5-specific湖泊类型。
如果你希望你的应用程序可以运行在.NET 4.0:你不能..net 4.5和4.6是在就地升级。一旦安装,您的系统它不再有.NET 4.0。你可以安静运行.NET应用.NET 4.0,4.5和4.6和AS是向后兼容的,这是不是想用简单的运行时环境。