我正在看着
What’s the strangest corner case you’ve seen in C# or .NET?,这段代码让我想了一下:
public class Program { delegate void HelloDelegate(Strange bar); [STAThread()] public static void Main(string[] args) { Strange bar = null; var hello = new DynamicMethod("ThisIsNull",typeof(void),new[] { typeof(Strange) },typeof(Strange).Module); ILGenerator il = hello.GetILGenerator(256); il.Emit(OpCodes.Ldarg_0); var foo = typeof(Strange).GetMethod("Foo"); il.Emit(OpCodes.Call,foo); il.Emit(OpCodes.Ret); var print = (HelloDelegate)hello.CreateDelegate(typeof(HelloDelegate)); print(bar); Console.ReadLine(); } internal sealed class Strange { public void Foo() { Console.WriteLine(this == null); } } }
我明白代码的作用,但我不明白为什么它的作品.不是那样做null.Foo()?它的作用就好像Foo()是静态的,而这正在被调用:Strange.Foo();.
请你告诉我我失踪了什么