问题描述
看的C#入门经典,448页源码是如下所示:toolStripStatusLabelText.Text="Numberofcharacters:"+richTextBoxText.Text.Length;
疑问:字符串相加时不是要求几个几个均为字符串时才能相加吗?为什么不是toolStripStatusLabelText.Text="Numberofcharacters:"+richTextBoxText.Text.Length.ToString();
还是因为什么重载,关于重载,我如何察看当前语句所设计的函数是重载的?新手,谢谢大家热心帮忙。
解决方案
解决方案二:
String类型有一个叫做Concat(object,object)的操作,c#编译器在遇到这种表达式时会编译为调用它的连接操作。而假如是字符串的拼接,就直接编译为.net的字符串拼接,而不会调用Concat方法。
解决方案三:
嗯,sorry,刚刚编译了一下重新看了看编译结果。假如是字符串拼接,那么c#编译结果仍然会调用Concat,但是是调用Concat(string,string)的,而不是(object,object)签名的那个Concat。
解决方案四:
引用楼主zsm7321400的回复:
关于重载,我如何察看当前语句所设计的函数是重载的?新手,谢谢大家热心帮忙。
同一个类型(包括子类型)的相同名称的方法,有不同的参数签名,这就是重载。因此看接口格式来判断重载。如果你要看内部实现机制,那么需要读源代码。包括使用vs自动打开开源的.netframework源代码,或者使用任何一种逆向工程工具。我们可以看看重载了的Concat的其中一个publicstaticstringConcat(objectarg0,objectarg1){if(arg0==null){arg0=Empty;}if(arg1==null){arg1=Empty;}returnConcat(arg0.ToString(),arg1.ToString());}
解决方案五:
引用2楼sp1234的回复:
嗯,sorry,刚刚编译了一下重新看了看编译结果。假如是字符串拼接,那么c#编译结果仍然会调用Concat,但是是调用Concat(string,string)的,而不是(object,object)签名的那个Concat。
编译器会把字符串常量连起来没错吧,对变量或者不同的类型才会调用concat
解决方案六:
引用4楼KarasCanvas的回复:
编译器会把字符串常量连起来没错吧,对变量或者不同的类型才会调用concat
楼主给出的第二个参数是变量,而不是字符串常量。
解决方案七:
嗯,我所说的是两个变量情形下的问题。对于两个字符串常量的问题,与要解决的当前问题其实并没有什么冲突。只不过是(将来)要不要“抠”到那一个特殊的优化情形的问题。