int i=1;
long longOne=i; //assignment works fine
//...but
bool canAssign=(typeof(long).IsAssignableFrom(typeof(int))); //false
Run Code Online (Sandbox Code Playgroud)
为什么是canAssign假的?
Mat*_*les 20
看一下Reflector中的方法,看起来这个方法用于确定继承而不是兼容性.
例如,如果您有一个实现接口的类,那么如果您这样做,该方法将返回true
(typeof(interface).IsAssignableFrom(typeof(class))
Bol*_*ock 11
将inta 分配给a时long,所有发生的都是隐式转换.longOne是一个实际的long(好像你初始化它1L),而不是int伪装成一个long,如果你得到漂移.
也就是说,int(或Int32)和long(或Int64)在继承或实现方面没有关系; 它们恰好是可转换的,因为它们都是整数类型.
在IsAssignableFrom返回true,如果类型相同,或者如果式工具或继承它。
Along不继承int,因此该方法返回 false。
当您int为 along赋值时,它不仅仅是一个赋值。编译器还会自动添加代码以将int值转换为long值。
| 归档时间: |
|
| 查看次数: |
13441 次 |
| 最近记录: |