构造函数要点:
1.适用场景: 构造函数的主要作用是在创建对象(对类进行New实例化)时初始化对象,给对象附初值,
实例化New一个类时其实就是调用了这个类的构造函数 Person p=new Person(); 这里就是调用了Person类的构造函数Person()方法,括号内是构造函数的参数,这里是无参的。
2. 方法重载:一个方法可以有多个构造函数 参数列表必须不同(参数个数、类型、顺序),一个类需要手动添加至少一个构造函数,如果定义类时没有声明构造函数,系统会自动生成无参构造函数。 提供多个构造函数的目的是为了实例化类时根据不同的需求创建不同的实例对象。
3. 返回值:构造函数没有返回值;(没有 int,string等,连void都没有)
4. 函数名称:构造函数名称必须与类同名。
首先我们看看构造函数声明,重载以及继承调用的代码:
class Person { public Person(string name, int age) { this.Name = name; this.Age = age; } public Person(string name, int age, char sex) //构造函数的重载 : this(name, age) { this.Sex = sex; } public Person() //构造函数的重载 {} }
class Chinese : Person { public Chinese (string name ,int age ,char sex):base (name,age,sex ) //构造函数的继承调用 { } }
但是有些细心地人就会问那么下面为什么还有这段代码呢,
public Person(string name, int age, char sex) : this(name, age) //构造函数的重载 { this.Sex = sex; }
public Person() //构造函数的重载 {
} 这个其实是构造函数的重载。
重载:函数名不变,只改变参数的个数或参数的类型
作用:重载构造函数的主要目的是为了给创建对象提供更大的灵活性,以满足创建对象时的不同需求,如上,可以传0个参数也可以传2个,当然也可以传3个参数。
在构造函数this用于限定被相同的名称隐藏的成员,不要this也是可以的,但是在属性定义中的索引器中就是不可或缺的。
下面我们在介绍构造函数的继承调用,代码如下:
class Chinese : Person { public Chinese (string name ,int age ,char sex) : base (name,age,sex ) //构造函数的继承调用 { } } 这段代码是构造函数的继承调用,首先是类的继承,class Chinese : Person创建一个类Chinese 继承Person类,下来是在类Chinese 声明一个构造函数,和父类Person不同的是后面有个base(name,age,sex),这其实就是继承调用,base指向的是父类Person,然后子类Chinese继承父类Person的name,age,sex。 而因为在Person类中构造函数重载分别有0,2,3个参数,所以在main函数里面可以有这几种创建对象的方式: Person p1=new Person(); //Person p1=new Person("小明",18); //Person p1=new Person("小明",18,'男') 这几种编译都可以通过。
定义一个Person类,之中有string类型的姓名,int类型的年龄和枚举类型的性别(male,female)
创建两个构造函数
构造函数用作给对象附初值 在新建一个类的对象时都会调用类的构造函数
例如 Person p=new Person(); 括号内就是构造函数的参数
一个方法可以有多个构造函数 参数列表必须不同(方法重载)
调用有三个参数的构造函数为Person类对象附初值Person p = new Person("斯沃",18,0);
调用无参方法Person p1=new Person();
比如呢 计算器计算加法 两个整数也能相加, 两个小数也能相加, 一个整数一个小数也能相加
为了实现如上功能,我们该怎么办呢
我们可以写四个方法,分别叫做SumIntAndInt(int a,int b) SumIntAndDouble SumDoubleAndInt SumDoubleAndDouble
啊四个方法,是不是看起来很高端,但是并没有什么卵用 首先名字很长并且都要是不同的名字,其次调用起来的话并不知道传进去什么参数,该用什么类型, 那么 该怎么办呢,怎么办呢
其实C#里可以定义多个方法名相同的方法 这就是方法的重载
方法重载
在同一个类里 方法名称相同,方法参数列表不同(个数 类型 顺序), 与方法的返回值没有任何关系
对对对对对对 如你所见他并不会报错
但是不能定义两个参数列表完全相同的方法,只要类型或者个数或者顺序不一样都可以成功
如你所见 不抵了 因为参数列表完全相同 就算返回值类型不同也不行 返回值类型跟方法重载没有半毛钱关系!!
神奇的是这样就可以了!
然后我们在Main方法里就可以调用这四个重载的方法
比如Sum(1,2) Sum(1.1,2) Sum(1,2.1) Sum(1.1,2.2)
他都可以运行然后返回结果是不是很神奇是不是很鬼畜
嗯就是这样