相关疑难解决方法(0)

这个== null在.NET实例方法中 - 为什么这可能?

我一直认为this在实例方法体内是不可能的.以下简单的程序表明它是可能的.这是一些记录在案的行为?

class Foo
{
    public void Bar()
    {
        Debug.Assert(this == null);
    }
}

public static void Test()
{            
    var action = (Action)Delegate.CreateDelegate(typeof (Action), null, typeof(Foo).GetMethod("Bar"));
    action();
}
Run Code Online (Sandbox Code Playgroud)

UPDATE

我同意答案,说明这种方法的记录方式.但是,我真的不明白这种行为.特别是因为它不是C#的设计方式.

我们收到了某人的报告(很可能是一个使用C#的.NET组(当时认为它还没有命名为C#))谁编写了一个在空指针上调用方法的代码,但是他们没有得到一个例外,因为该方法没有访问任何字段(即"this"为null,但方法中没有使用它).那个方法然后调用另一个方法,它确实使用了这一点并引发了一个异常,随后出现了一些令人头疼的问题.在他们弄清楚之后,他们给我们发了一张关于它的说明.我们认为能够在null实例上调用方法有点奇怪.Peter Golde做了一些测试,看看总是使用callvirt的性能影响是什么,它足够小,我们决定做出改变.

http://blogs.msdn.com/b/ericgu/archive/2008/07/02/why-does-c-always-use-callvirt.aspx

.net c#

34
推荐指数
4
解决办法
4574
查看次数

标签 统计

.net ×1

c# ×1