C# 类(class)
定义一个类,就定义了一个类型的蓝图,这个时候并没有任何的数据。但它定义了类的名称意味着对象由什么组成以及可执行什么操作就确定了。
类的定义:
<access specifier> class class_name
{
//成员变量
<access specifier> <data type> variable1;
<access specifier> <data type> variable2;
...
<access specifier> <data type> variableN;
//成员函数
<access specifier> <return type> method1(parameter_list)
{
//method body
}
<access specifier> <return type> method2(parameter_list)
{
//method body
}
...
<access specifier> <return type> methodN(parameter_list)
{
//method body
}
}
访问标识符<access specifier>指定了对类及其成员的访问规则。如果没有指定则使用默认的访问标识符。类的默认访问标识符是internal,成员的默认访问标识符是private.
数据类型<data type>指定了变量的类型,返回类型<return type>指定了返回的方法返回的数据类型
如果要访问类的成员,使用.运算符
点运算符链接了对象的名称和成员的名称
Visual Studio中新增项目chapter11_001
新增一个类代码如下:
class Student
{
public string name; //姓名
public long id; //ID
public string school; //学校
public string addr; //地址
public Student(long id, string name, string school, string addr)
{
this.id = id;
this.name = name;
this.school = school;
this.addr = addr;
}
public void Display()
{
Console.WriteLine("学号:{0};姓名:{1};学校:{2};地址:{3}", id, name, school, addr);
}
}
在Main方法中添加如下代码进行测试
//声明一个Student对象
Student student = new Student(10001,"谢声","西安交通大学","湖南省常德市");
student.Display();
Console.ReadKey();
编译运行后结果如下:
C#中构造函数
类的构造函数是类的一个特殊的成员函数,当创建类的新对象时会执行构造函数。
构造函数的名称与类的名称完全相同,并且它没有任何返回值。
如上例中的构造函数
public Student(long id, string name, string school, string addr)
{
this.id = id;
this.name = name;
this.school = school;
this.addr = addr;
}
上面的构造函数是带参的构造函数,这种构造函数叫做参数化构造函数,这样的话可以在创建对象的同时为对象赋初始值。
如上面实例中在创建对象的时候则调用构造函数进行初始化赋值:
Student student = new Student(10001,"谢声","西安交通大学","湖南省常德市");
C#中的析构函数
类的析构函数是类的一个特殊成员函数,当类的对象超出范围时执行。
析构函数的名称是在类的名称前加上一个~前缀组成,它不返回值,也不带有任何参数。
析构函数用于在结束程序(关闭文件、释放内存……)之前释放资源。它是不可以继承和重载的。
比如上类中加入如下析构函数,则在程序结束时程序会自动调用它
//析构函数
~Student()
{
Console.WriteLine("学生对象被删除!");
}
C#中静态成员
在类中可以使用static关键字把类成员定义为静态的,当把一个类成员定义为静态时就意味着不管这个类有多少个对象被创建,它只会有一个这个静态员的副本。
调用静态成员时只需要使用类名进行调用就可以了无需刻意去创建类的实例去调用。
静态变量可以在成员函数或类的定义外部进行初始化,也可以在类的内部进行初始化
在类中新增一个静态成员
//静态成员
public static int num; //计数器
在类中新增计数累加方法以及计数品获取的方法
//计数累加
public void Count()
{
num++;
}
//获取计数器当前的值
public int getNum()
{
return num;
}
把Main方法中创建类并获取静态成员的方法改造如下:
//声明一个Student对象
Student student = new Student(10001,"谢声","西安交通大学","湖南省常德市");
student.Display();
student.Count();
Console.WriteLine("当计数:{0}",student.getNum());
//声明一个Student对象
Student student1 = new Student(10002, "advent", "西安交通大学", "湖南省常德市");
student1.Display();
student1.Count();
Console.WriteLine("当计数:{0}", student1.getNum());
Console.ReadKey();
编译运行后的结果如下:
对一上面的获取静态成员num的值的方法同样可以getNum()使用static关键字进行标识这样在获取num的值时可以直接使用类名来进行调用。