C#4.0初探:dynamic 关键字
2009-05-29 08:31:21 来源:WEB开发网可以看出生成的IL代码确实不美观,不过大体能看出端倪。为了方便查看,用Reflector查看,把反编译结果设置为.net2.0,代码清晰多了:
01. internal class Program
02. {
03. // Methods
04. private static void Main()
05. {
06. object d = "str";
07. if (<Main>o__SiteContainer0.<>p__Site1 == null)
08. {
09. <Main>o__SiteContainer0.<>p__Site1 = CallSite<Action<CallSite, object>>.
10. Create(new CSharpInvokeMemberBinder(CSharpCallFlags.None, "ToString", typeof(Program),
11. null, new CSharpArgumentInfo[] { new CSharpArgumentInfo(CSharpArgumentInfoFlags.None, null) }));
12. }
13. <Main>o__SiteContainer0.<>p__Site1.Target(<Main>o__SiteContainer0.<>p__Site1, d);
14. }
15. // Nested Types
16. [CompilerGenerated]
17. private static class <Main>o__SiteContainer0
18. {
19. // Fields
20. public static CallSite<Action<CallSite, object>> <>p__Site1;
21. }
22. }
06行先把赋值给dynamic的值赋给object类型,检查编译器生成的静态类<Main>o__SiteContainer0的静态字段<>p__Site1是否为null,如果是,则对其赋值,赋值的内容在这里不详细研究。然后调用<>p__Site1进行操作。
更多精彩
赞助商链接