C#重载概念中的返回值数据类型问题

这是个困扰新手的问题,这个问题我经常都想一想,今天终于抽出时间在VS上进行了验证。

之前也在网上查过好多次,对于返回值数据类型不同,而参数签名(个数,顺序,类型)相同及不同的情况下,究竟是否构成重载呢?

首先,我要明确一点,怎样印证是否构成重载?

我们在用VS智能提示的时候,如果某方法有重载,那么在调用它的时候,提示信息中会显示它的重载个数,我就通过这个方法来印证,

如果我的测试方法构成重载,那么就能在智能提示中出现。

有的书上就简单地一写,重载与返回值无关,个人感觉还是太模糊了,啥叫无关?!靠!扯再多也不如一试,谁的话也别信,信调试~

 

步骤一:最普通的重载

图1:最传统、最朴实、最标准、无争议的重载。。

 

图2:方法智能提示中可以看到“(共2个)”字样,说明构成了响当当的重载。

 

步骤二:方法名相同,参数签名相同

 图3:写一个和int f(int a)只有返回值不同的方法,F6生成时,编译出错,出错提示见图片,这个问题,网上的讲解很易懂,你调用f(int a)的时候,鬼知道你想调返回值为哪个的。。可能别的高级语言彪悍到能够支持这种定义和调用,不过C#是铁定不行滴了。

 

图4:编译都通不过,更不用提构成重载鸟,啥子也表提了~

 

图5:哥不死心,又试了试双参数的方法,果然还是不行~我好无聊。。

 

步骤三:将一个正常重载方法的返回值类型修改,看是否仍然构成重载

图6:先写一个标准的三参数重载用来恶搞

 

图7:恶搞开始,先把这个三参数重载方法的返回值从int改成string,童鞋们,注意,是改,不是再多写一个哦,F6果断【没有报错】,重载列表竟然也可以看到三个方法,我一共就定义了三个方法,不看第三个方法的提示,也知道重载成功了。

 

图8:哥不死心,就是要往下看,第二个肯定是无争议成功可以重载滴

 

 图9:说了这么多废话,真相终于揭晓!它重载了,它竟然果断还是构成重载鸟!看见了没?!返回值是string的第三个方法,和前两个返回值是int的方法构成重载了耶!

也有人说,虽然语法上能通过,也能正常调用,但应认为方法3和方法1是不同的两个方法,根本对不上重载的定义,但我觉得这种提示列表,不理解成重载实在说不过去了。。可能还有不严谨的地方,等以后我NB了再回来完善这个贴,目前我就这么认为了,嚯嚯。

posted @ 2012-06-16 10:19  钻葛格  阅读(3465)  评论(3编辑  收藏  举报