Kru*_*lur 1 .net c# extension-methods
我想知道C#中扩展方法的行为.请参阅以下示例:
static string ExtendedToString( this object oObj )
{
return "Object";
}
static string ExtendedToString( this Array oArray )
{
return "Array";
}
// Example 1: int array - working as expected.
int[] o = new int[] { 1, 2, 3 };
o.ExtendedToString( ); // returns "Array"
// Example 2: array as object - did not expect the result.
object o = new int[] { 1, 2, 3 };
o.ExtendedToString( ); // returns "Object"
Run Code Online (Sandbox Code Playgroud)
为什么(在最后一种情况下)调用了对象的扩展方法而不是int []的方法?
过载分辨率在编译时执行.编译器看到它o 被声明为object,因此它调用带有的重载object.实际上o在运行时包含数组的事实是无关紧要的,因为编译器不知道它.
这实际上并不是特定于扩展方法,你可以通过将其称为普通静态方法得到相同的结果(ExtensionsClass.ExtendedToString(o))
| 归档时间: |
|
| 查看次数: |
552 次 |
| 最近记录: |