一、对象的初始化
VB中我们定义变量时,给变量分配一定的空间,但并没有要求对变量进行初始化。
对象定义时就不同了。对象是类的实例化,是确实存在的实体,一旦建立了对象不但要为其分配内存控件,而且要保证对象的所有属性有确定的意义。也就是在创建对象时(new)就进行初始化。
1、建立类
<span style="font-size:18px;"> class Student
{
private string _no;
private int _age;
public string StudentNo
{
get { return _no; }
set { _no= value; }
}
public int StudentAge
{
get { return _age; }
set { _age= value; }
}
}
</span>
2、实例化对象
<span style="font-size:18px;"> private void button1_Click(object sender,EventArgs e)
{
Student zhang = new Student(); //创建对象,也初始化构造函数
//以下其实是使用了类的编译器set
zhang.StudentNo ="000001";
zhang.StudentAge = 16;
//显示对象的内容,其实是使用了类的读取器get
label1.Text= zhang.StudentNo +zhang.StudentAge;
}</span>
注意:get{}和set{}为访问器。get为读取,set为编写。只读取数据用get;相反则用set。其中set中的“value”为用户赋给成员的值。
二、什么是构造函数和析构函数?怎样去用它们?
1、构造函数
(1)定义:是一种特殊的成员函数,它主要用于为对象分配空间,进行初始化。
(2)特性:
- 其名字必须与类名相同
- 它可以有任意类型的参数,但不能指定返回类型(void类型也是不合法的)。它有隐含的返回值,该值由系统内部使用。
- 它是特殊的成员函数(在C++中,其函数体可写在类体内,也可写在类体外)
- 它可以重载(一个类中可以定义不同参数个数或不同类型的构造函数)。若系统无显示定义构造函数,系统会自己生成一个缺省的构造函数(不做任何事情)
- 它被声明为公有函数,但它不能向其他成员函数那样被显示的调用,它是在定义对象的同时被调用。
(3)实例
<span style="font-size:18px;">class Cat() //声明Cat类
{
public string name; //成员变量
public Cat(stringname) //利用构造函数为初始的Cat赋初值
{
this.name=name; //进行赋值
}
}</span>
2、析构函数
(1)定义:如同构造函数可以自动进行对象属性的初始化一样,C#也会自动调用一个函数注销该对象并进行资源的释放与清理工作,这个工作就即析构函数。
(2)特性:
- 名字与类名相同,前加“~”。
- 它是无类型,无参数的。因为它只需释放资源,不用返回任何调用结果。
- 一个类只有一个析构函数,不能随意调用,只在对象注销时,自动调用。
- 同构造函数,若无定义析构函数,系统会自动生成一个。
(3)实例
<span style="font-size:18px;"> class Cat()
{
……
~ Cat()
{
console.WriteLine();
}
}</span>
注意:
三种情况调用析构:
对象注销时,会自动调用析构函数
对象定义在一个函数体,函数运行结束时,自动撤销对象,析构函数也被自动调用。
若对象由new动态创建,在用delete释放它时,其析构函数被自动调用(若不用delete释放,则系统不会调用析构函数)