none
C# 类似 C++ 的内联函数实现? RRS feed

  • 问题

  • C#  如何实现类似 C++ 内联方法?
    比如有一段代码,生成机器码,想把实现逻辑的函数释放到各调用的类中,而不是直接调用这个函数。

            class Token {
                public static string GetToken() {
                    return "token";
                }
            }
            //调用类
            class Invoker {
                private void DoSome() {
                    Token.GetToken();
                }
            }
            //编译后变成成这样
            class Invoker {
                private void DoSome() {
                    Invoker.GetToken();//把 Token.GetToken() 变成自己的方法
                }
                public static string GetToken() {
                    return "token";
                }
            }


    或者编译时有没有什么办法把 Token.GetToken()  变成匿名函数,让编译器自己解析成内联??
    • 已编辑 ch1999 2013年7月28日 6:16
    2013年7月28日 6:10

全部回复

  • 没人看吗?怎么回复都没有一个。。。。
    2013年7月28日 6:58
  • hello,

    你是说要动态产生一个方法?

    这应该要用继承抽象类别(或界面)来实现


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/

    2013年7月30日 7:38
  • 不是,是在编译后的 IL 中 不要再显示调用Token.GetToken(),而是另一份跟Token.GetToken()相同的代码,这段代码的逻辑跟Token.GetToken()是一样的,但是不在同一个地方,是编译时生成的。每个调用Token.GetToken()的地方都会产生一段这样的代码

    2013年8月3日 11:35
  • Release 模式下,像这样的代码: public static string GetToken() { return "token"; },编译器是极有可能给你内联的。当然,C#本身没有 C++ inline 关键字,不过你可以使用 TargetedPatchingOptOut 特性,同 C++ 中的 inline 的作用基本相同。不过你要慎

    用。

    2013年8月8日 8:32