黑马程序员技术交流社区

标题: C#返回类型不同是否为方法重载? [打印本页]

作者: 马林康    时间: 2012-7-18 20:32
标题: C#返回类型不同是否为方法重载?
本帖最后由 马林康 于 2012-7-18 23:26 编辑

public string b(int a, string name) { return a; }
public void b(string name, int a) { }
这两个方法算不算是方法的重载?

作者: 刘秋菊    时间: 2012-7-18 20:41
本帖最后由 刘秋菊 于 2012-7-19 11:56 编辑

public string b(int a, string name) { return a; }
函数编译出错,应该是
public string b(int a, string name) { return name; }
这样
public string b(int a, string name) { return name; }
  public void b(string name, int a) { }

是方法重载,它们参数顺序不同
方法重载是指在同一个类中方法同名,参数不同,调用时根据实

参的形式,选择与他匹配的方法执行操作的一种技术。

这里所说的参数不同是指以下几种情况:

①  参数的类型不同

②  参数的个数不同

③  参数的个数相同时他们的先后顺序不同


作者: 马林康    时间: 2012-7-18 20:48
刘秋菊 发表于 2012-7-18 20:41
是方法重载,它们参数顺序不同
方法重载是指在同一个类中方法同名,参数不同,调用时根据实

public string b(int a, string name) { return a; }
public void b(int a,string name) { }

这个是吗?
作者: 钱灿    时间: 2012-7-18 21:03
public string b(int a, string name) { return a; }
public void b(int a,string name) { }

这个不是重载; 因为其签名(返回类型不是签名的一部分)是相同的. 必须定义不同的参数类型.
作者: 赵鹏程    时间: 2012-7-18 22:56
方法重载要参数的个数和类型不一样才能构成方法重载

作者: 李朋朋    时间: 2012-7-18 23:14
首先从概念上理解方法重载,重载是指方法名称相同, 只是参数个数或类型不同. 方法功能是相同的. 上面的两个方法,一个有返回值,一个没有返回值,明显不是方法重载。


作者: 刘秋菊    时间: 2012-7-19 07:46
本帖最后由 刘秋菊 于 2012-7-19 11:51 编辑

public string b(int a, string name) { return name; }
public void b(string name, int a) { }
是方法重载,方法重载跟返回值类型 没有关系
作者: 刘秋菊    时间: 2012-7-19 08:35
1.首先解释一下方法的签名:
方法签名由方法名称和一个参数列表(方法的参数顺序和类型)组成。
注意:方法的签名并不包括方法的返回值。虽然每个重载方法可以有不同的返回类型,单返回类型并不足以区分所条用的是哪个方法。
2.在来解释一下什么叫方法重载:
方法重载是指在同一个类中方法同名,参数不同,调用时根据实
参的形式,选择与他匹配的方法执行操作的一种技术。
这里所说的参数不同是指以下几种情况:
①  参数的类型不同
②  参数的个数不同
③  参数的个数相同时他们的先后顺序不同
注意:系统会认为是同一个方法的两种情况,这样的两个方法不可以在同一个类里,否则系统会报错。
⑴返回类型不同,方法名和参数个数、顺序、类型都相同的两个方法
⑵返回类型相同,方法名和参数的个数、顺序、类型都相同的两个方法,但是参数的名字不同
例如:
          ①        protected  void A(){
            Console.WriteLine("aaaaaaaaaaaa"); }
    ②  protected void A(string s, int a){ //正确的方法重载
          Console.WriteLine("ccccccccccc"); }
    ③  protected void A(string a, int s){
          Console.WriteLine("ccccccccccc");
      }
④  protected void A(int a,string s) {
Console.WriteLine("bbbbbbbbbb");
}
①  与②是方法重载
②  与③和④比较一下:②与③是同一个方法,因为他们只是参数的名字不同,②与④是正确的方法重载,因为他们参数的顺序不同
2.适用范围:普通方法和构造方法都可以
3.决定方法是否构成重载有以下几个条件:
◆ 在同一个类中;
◆ 方法名相同;
◆ 参数列表不同。

作者: 许庭洲    时间: 2012-7-19 08:44
public string b(int a, string name) { return a; }//字符串类型的构造函数
public void b(string name, int a) { }//void类型的构造函数,明显与上面构造函数类型不一致
这2个方法不能构成重载,会有编译错误
作者: 张恒    时间: 2012-7-19 16:23
构成方法的重载与返回值没有关系,所以不能构成方法重载
作者: 黄涛    时间: 2012-7-19 16:48
这个肯定不能重载的,必须定义不同的参数类型.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2