一、什么是构造方法?
首先,它是一个方法,它是类中众多方法中的一个。其次,它具有类中其他方法所不具备的一些特性。简单来说,它是一个有着特殊使命的方法,他的绰号叫构造。
二、构造方法相对其他方法有哪些不同?
方法名:类中普通的方法可以根据代码书写者的个人喜好任意取名。但是,构造方法不可以。构造方法的名字必须与类名相同。换句话说,当类中的一个方法名与类名相同时,C#即认为此方法为类的构造方法。
执行顺序:类中的普通方法是在类实例化之后被调用执行的,而构造方法则是在类实例化之前执行的。
可以简单理解为:
当准备创建一个类的实例时,首先会执行构造方法,然后在进行类的实例化。如以下代码
ClassName objName = new ClassName();
可以理解为关键new后面 ClassName()为类的构造方法。
三、如果类中没有书写构造方法,实例化类时会出错么?
不会。首先,C#中每个类都有自己的构造方法;即便你在书写类时没有书写构造方法,C#也会创造一个默认的没有参数的构造方法出来,这个默认的构造方法是看不到的,但它是真实存在的。
四、一个类中只能由一个构造方法么?
不是的,一个类中可以存在多个构造方法,以不同的参数进行区分,这就构成了构造方法的重载。
五、为什么要用构造方法
1)对对个属性进行赋值时,不需要重复的写实例名。
2)可以保证用户在new一个对象时必须对某一属性进行赋值。
3)在创建属性时,对只读属性进行初始化。
代码示例如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _02练习
{
class Program
{
static void Main(string[]args)
{
//下句代码为初始化时进行赋值。
Personp = new Person("张三¨",'男',19,89,90,87);
//不必重复书写实例名。
// p.Name = "张?三¨y";
//p.Sex ='男D';
//p.Age =19;
//p.Chinese= 89;
//p.English= 90;
//p.Math= 87;
Personp1 = new Person("李斯",'女', 18);
p.SayHello();
p.ShowScore();
Console.ReadKey();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _02练习
{
class Person
{
//下面是构造方法
public Person(stringname,char sex,intage,int chinese,intmath,int english)
{
this.name=name;
this.sex= sex;
this.age= age;
this.chinese= chinese;
this.english= english;
this.math= math;
}
publicPerson(string name,charsex, int age)//构造方法重载
{
this.name= name;
this.sex= sex;
this.age= age;
}
charsex;
public char Sex
{
get{ return sex; }
set
{
if(value =='男' ||value== '女')
{
sex = value;
}
else
{
sex = '男';
}
}
}
intage;
public int Age
{
get{ return age; }
set
{
age = value>= 0 ?value : 0; //三元表达式。
}
}
intchinese;
public int Chinese
{
get{ return chinese; }
set{ chinese = value>=0?value:0; }
}
intmath;
public int Math
{
get{ return math; }
set{ math = value >= 0 ? value : 0; }
}
intenglish;
public int English
{
get { return english; }
set{ english = value >= 0 ? value : 0; }
}
stringname; //name只有get方法,为只读属性。
public string Name
{
get{ return name; }
//set {name = value; }
}
public void SayHello()
{
Console.WriteLine("我叫{0},我今年{1}岁了,我是{2}生",name,age,sex);
}
public void ShowScore()
{
intsum = chinese + math + english;
intavg = sum / 3;
Console.WriteLine("我叫{0},我的总成绩是{1},平均分是{2}",name,sum,avg);
}
}
}