Chr*_*air 34
您可以使用Delegate.CreateDelegate重载创建此案例,您可以在其中提供null
调用目标的引用.
class Foo
{
public void Method()
{
Console.WriteLine(this == null);
}
}
Action<Foo> action = (Action<Foo>)Delegate.CreateDelegate(
typeof(Action<Foo>),
null,
typeof(Foo).GetMethod("Method"));
action(null); //prints True
Run Code Online (Sandbox Code Playgroud)
从该页面上的MSDN备注:
如果firstArgument是空引用而method是实例方法,则结果取决于委托类型类型和方法的签名:
•如果类型的签名明确包含方法的隐藏的第一个参数,则表示委托表示开放实例方法.调用委托时,参数列表中的第一个参数将传递给方法的隐藏实例参数.
•如果方法和类型的签名匹配(即,所有参数类型都兼容),则表示委托被空引用关闭.调用委托就像在null实例上调用实例方法一样,这不是特别有用的事情.
因此,它被记录为已知的,可能是预期的行为.
归档时间: |
|
查看次数: |
1806 次 |
最近记录: |