A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙健 中级黑马   /  2013-10-26 15:03  /  2882 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙健 于 2013-10-27 01:35 编辑

构造函数除了全参,和无参,是否还可以重载

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

10 个回复

倒序浏览
构造函数可以被重载,
当类中新写的构造函数无论是有参还是无参,系统默认的构造函数就会被覆盖。

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
有你珍贵 发表于 2013-10-26 15:32
构造函数可以被重载,
当类中新写的构造函数无论是有参还是无参,系统默认的构造函数就会被覆盖。 ...

能用代码说明一下吗
回复 使用道具 举报
孙健 发表于 2013-10-26 15:42
能用代码说明一下吗

这个这个。。。我真说不清。就是可以重载就是。。。当你新建一个类的时候。系统默认会创建一个构造函数。
你新写一个构造函数的时候系统创建那个就不存在了。
回复 使用道具 举报
构造函数是根据你传的参数个数和类型来进行重载的
  1.     class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             //参数不同,调用的构造函数也不同
  6.             Person p1 = new Person();
  7.             Person p2 = new Person("张三");
  8.             Person p3 = new Person("李四", 20);

  9.         }
  10.     }

  11.     class Person
  12.     {
  13.         public Person()
  14.         {
  15.             //系统默认的无参构造函数,添加了新的有参构造函数它会被覆盖,需要用时要自己再添加写
  16.         }
  17.         public Person(string name)
  18.         {

  19.         }
  20.         public Person(string name, int age)
  21.         {

  22.         }
  23.         
  24.     }
复制代码

评分

参与人数 1技术分 +2 收起 理由
追溯客 + 2

查看全部评分

回复 使用道具 举报
重载是参数个数或者类型不相同。

举个简单的例子:定义一个Student类

Class Student
{
      int age;      string name;

      public int Age{};
      public string Name{};
      public Student( )     //这个是系统默认的构造函数,如果你什么都不写,调用的就是这个
      }                  //但是如果你写了新的没有这个构造函数,也就无法用无参数的方法创建Student类了
      }

      public Student(int age)
      {
      }

       public Student ( int age , string name)
       {
       }

       public Student(string name , int age)
       {
       }
}


以上4种构造方法均不重复,都可同于调用,构成了重载。 第一个无参数,与后面都不同;第二个只有一个int参数,与其他不同;主要是后面2个,虽然个数相同,类型也相同,但是顺序不同,也构成了重载。
  简单点说,同名的方法(无论是构造函数还是其他函数)先比较个数是否相同,不同肯定是构成重载了;其次比较每一位上的输入是否类型相同,如果完全一样,那么系统就会蒙了,只要有一个位置上的输入类型不相同,就构成了重载。

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
亲  构造函数可以重载  构造函数也是一个方法  只是一个特殊的方法  您说能不能重载呢  其实这个问题您可以自己在IDE里面试一下 就知道了 在学习的过程中 要靠自己的摸索 并不是遇到问题马上就问人解决  自己解决才是最牢靠的
回复 使用道具 举报
如问题得到解决,请及时修改为"以解决",黑马有你更精彩!
回复 使用道具 举报
        
StringBuilder类的构造函数
        方法重载形式
        StringBuilder() //初始化StringBuilder类的新实例
        StringBuilder(Int32) //使用指定的容量初始化StringBuilder类的新实例
        StringBuilder(String)        //使用指定的字符串初始化StringBuilder类的新实例
        StringBuilder(Int32,Int32)        //初始化StringBuilder类的新实例,该类起始于指定容量并且可增大到指定的最大容量。
        StringBuilder(String,Int32)        //使用指定的字符串和容量初始化StringBuilder类的新实例
        StringBuilder(String,Int32,Int32,Int32)        //使用指定的子字符串和容量初始化StringBuilder类的新实例

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

回复 使用道具 举报
构造函数
    当使用new关键字创建类的实例时,就会使用该类的构造函数,一个类可以同时拥有多个接受不同参数类型的构造函数,构造函数是一种特殊的方法,构造函数名与类名相同,没有返回类型
无参构造函数,如果类没有显式定义构造函数,编译器将自动提供不接受参数的构造函数,因此无参构造函数也被称为默认构造函数(如果用户编写了一个带参数的构造函数,编译器将不再自动提供默认的构造函数)


方法重载
   在c#中,同一个类中的2个或2个以上的方法可以有同一个名字,只要他们的参数声明不同即可,在这种情况下,该方法就称为重载,这个过程就称为方法重载,方法重载是c#实现多态性的一个方式
   当一个重载方法被调用时,c#用参数的类型或数量来表明实际调用的重载方法的版本,因此,每个重载方法的参数的类型或数量必须是不同的。虽然每个重载方法可以有不同的返回类型,但返回类型并不足以区分所使用的是哪个方法
   C#中不允许存在方法名和参数列表相同、返回值不同的方法
在一个类中存在方法名相同、参数列表不同(参数个数或者参数类型不同)的现象我们称之为overloading。需要注意的是这里没有提到方法的返回值。也就是说决定方法是否构成重载有两个条件:
(1)在同一个类中;
(2)方法名相同;
(3)参数列表不同。

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

回复 使用道具 举报
这要看是类中的构造函数还是结构中的构造函数。
类中的构造函数还可以重载,结构中的构造函数不可以
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马