类概述
.Net平台最基本的编程结构是类类型,类是由字段数据和操作这个数据的成员构成的自定义类型;类即是将数据和相关功能的集合封装起来,以模拟现实世界中的实体
定义类
class PersonRunning { //状态 public string Name; public int runningSpeed; //功能 public void PrintState() { Console.WriteLine("{0} is going {1} 米/秒", Name, runningSpeed); } public void SpeedUp(int delta) { runningSpeed += delta; } }
在Main()方法中使用Personrunning
static void Main(string[] args) { //分配和设置对象 PersonRunning currPerson = new PersonRunning(); myCar.Name = "小明"; myCar.runningSpeed = 2; //在for循环中多次调用函数,加速 for(int i=0;i<=5;i++) { myCar.SpeedUp(1); myCar.PrintState(); } }运行结果:
使用new关键字分配对象
对象必须使用new关键字才能被分配到内存中,使用new关键字的本质是在调用构造函数,如果不用new分配就会收到编译错误;有两种写法
PersonRunning myCar = new PersonRunning();或者:
PersonRunning currPerson; myCar = new PersonRunning();第二种写法:第一句只是声明了指向尚未被创建的currPerson对象的一个引用而已,在通过new关键字将引用赋给对象之后,这个引用才会指向内存中的有效实例
构造函数
构造函数是用构造类对象的初始状态的,即创建对象的时候创建其状态,它是类的特殊方法,构造函数永远不会有返回值,并且它的名字与类名相同
默认构造函数
C#类都可提了默认的构造函数,默认的构造函数不接受参数,默认的构造函数确保所有的数据字段都设置了正确的默认值
现在我们给runningPerson类,添加一个方法,用来输出字段的值
public void Display() { Console.WriteLine("Name值:{0} runningSpeed值:{1}", Name, runningSpeed); }当我们实例化一个具体对象后,立即调用这个方法
//分配和设置对象 PersonRunning currPerson; currPerson = new PersonRunning(); //调用默认构造函数,输出默认值 currPerson.Display();
输出如下:
这说明,用默认构造函数构建的对象,其数据成员都取得了相关类型的默认值,比如int类默认值0.
修改默认构造函数
public PersonRunning() { Name = "小王"; runningSpeed = 3; }这样,所有的PersonRunning类的对象都会取得“小王” 和“ 3 ” 的默认值,而不是数据类型的默认值
自定义构造函数
类可以有多个构造函数
//自定义构造函数 public PersonRunning(string currName) { Name = currName; } public PersonRunning(string currName,int currRunningSpeed) { Name = currName; runningSpeed = currRunningSpeed; }
调用自定义构造函数
PersonRunning currPerson = new PersonRunning("Jack");在这个构造函数中,我们只给Name字段成员赋值了,所以输出如下
PersonRunning currPerson = new PersonRunning("Jack",3);在上面的构造函数中,我们给两个字段成员 都赋值了
需要注意的,函数的参数和参数的类型,共同决定了一个函数签名
另外,一旦当我们自定义了构造函数,默认的构造函数就会被自动从类中移除,不再有效,如果此时用默认构造函数来构建对象,VS会给出错误提示
怎么样才能继续使用默认的构造函数?方法很简单,在代码中显式声明默认构造函数,唯一要注意的是默认构造函数的 成员为空;对于本例 可以这样写:
public PersonRunning() { }还有一个简单的方法生成默认构造函数,那就是在代码中键入 :" ctor " 然后按2次 Tab,VS会自动生成默认构造函数