String类型有一个叫做 Concat(object, object) 的操作,c#编译器在遇到这种表达式时会编译为调用它的连接操作。而假如是字符串的拼接,就直接编译为.net的字符串拼接,而不会调用 Concat 方法。

解决方案 »

  1.   

    嗯,sorry,刚刚编译了一下重新看了看编译结果。假如是字符串拼接,那么c#编译结果仍然会调用Concat,但是是调用 Concat(string, string) 的,而不是(object, object) 签名的那个 Concat。
      

  2.   


    同一个类型(包括子类型)的相同名称的方法,有不同的参数签名,这就是重载。因此看接口格式来判断重载。如果你要看内部实现机制,那么需要读源代码。包括使用vs自动打开开源的.net framework源代码,或者使用任何一种逆向工程工具。我们可以看看重载了的 Concat 的其中一个public static string Concat(object arg0, object arg1)
    {
        if (arg0 == null)
        {
            arg0 = Empty;
        }
        if (arg1 == null)
        {
            arg1 = Empty;
        }
        return Concat(arg0.ToString(), arg1.ToString());
    }
      

  3.   


    编译器会把字符串常量连起来没错吧,对变量或者不同的类型才会调用concat