构造方法

<span style="font-size:18px"

一、构造方法

定义:构造函数没有返回值,方法名和类名一直的方法,在new对象的时候被调用执行

作用:构造函数是对对象的状态进行一个初始化的功能

    当我们实例化一个类时,系统会自动对这个类的属性进行一个初始化,
        数字类型会初始化成0/0.0/0.00...;
        string类型会初始化null,什么都没有,和 "" 是不一样的;
        char类型初始化成了ASCII中的0,也就是''

使用构造方法的好处:
        对多个属性进行赋值的时候,不需要重复的写实例名:zsPer.name = 'aa'; zsPer.age=23; 重复了zsPer,构造方法中:thia.name="aa";this.age=23;
        可以保证用户在new一个对象的时候,必须对某一个属性进行赋值.[构造方发传参,构造方法中赋值给这个属性]
        在创建对象的时候,可以对只读属性进行初始化

无参构造方法:当我们定义好一个类之后,如果我们没有写构造方法,那么系统会自动的给我们加上一个默认的没有参数的构造方法,在这个方法中什么也没有做,我们看不到

注意:构造方法是一个特殊的方法,它的名字和类的名字是相同的,并且没有返回值。连void都可以省略不写,我们一旦手写一个构造方法后,系统原型默认给我们添加的无参的构造方法就不在添加了,参数可以添加也可以不添加,如果添加了参数,在new 的时候必须传递参数

定义构造方法的时候,一般都写成public,保证用户能够在外部访问

参数重名:当出现参数名相同的时候,是遵循的就近原则

this:指示代词this代表的是当前实例,当前对象

<span style="font-size:18px;">class Person
{
	public Person(string name)
	{
		this.name=name;
	}
	public string name;
}</span>


上面的代码中,name代表的是构造方法中的参数name, this.name代表的是字段name
其它:
1)要实例化一个类,必须要调用它的构造方法
2)一般使用构造函数都是实例化的时候对这个对象的成员进行一个初始化
3)构造函数同样是可以重载的,重载要求同样是函数的签名不一样[函数名是必须一样的,参数类型和个数可以不同]。如果我们手动的改写了构造函数,如果还需要一个无参的构造方法,需要我们手动的添加

类图

通用类图:分为三个,第一个是类名,第二个是字段和属性,第三个是方法,前面的加好和减号代表私有还是公有
C#类图:在项目文件上点击右键,查看类图就可以查看C#的类图


静态构造方法

构造方法也可以声明为static
1】实例构造方法初始化类的每一个新的实例,而Static构造函数初始化类层次的项目,通常,静态构造函数初始化类的静态字段
2】类层次项目需要被初始化:在任何静态成员被引用之前;在类的任何实例被创建之前
3】静态构造方法和实例构造方法的相同点:静态构造方法的名称必须和类型名相同;构造方法不能够有返回值
4】和实例构造方法不同点:在声明的时候用static修饰;一个类只能够有一个静态构造函数而且不能够带有参数;不能有访问修饰符

5】类既可以有实例构造方法也可以由静态构造方法
6】静态构造函数不能够访问类的实例成员,因此也就不能够使用this访问器,
7】不能够从程序中显示的调用静态构造方法,它是被系统自动调用:在类的任何实例被创建之前,在类的任何静态成员被引用之前

析构函数

作用:执行在类的实例被销毁之前需要清理或者释放非托管资源的行为。

【1】析构函数主要是在对象进行释放的时候调用,来回收内存的。被自动调用的,可以手动的回收资源,因为它的调用意味着这个对象将死亡,程序运行结束。
【2】析构函数通用和类同名,没有访问修饰符,没有参数,并且方法名称前面还要添加一个 ~ 符号
【3】不能够在结构函数中定义析构函数,只是能够在类中使用析构函数
【4】一个类中只是能够由一个析构函数
【5】析构函数不能够被继承也不能够被重载
【6】析构函数是无法进行调用的,是系统自己进行调用的
【7】析构函数既没有访问修饰符也没有参数
【8】析构函数只是对类的实例起作用,因此没有静态析构函数
【9】如果不需要就不执行析构函数,因为这会带来性能上的开销,而且它只是应释放对象自己的外部资源,不应该访问其他对象,因为无法假定这些对象还没有被收集

C#中的析构函数并不会在实例失效时立即调用,也无法知道什么时候被调用,也不能够显示的调用,如果有需要马上释放的非托管资源,最好是手动的调用标准模式Dispose方法来手动释放,而不是通过析构函数来调用


原文地址:https://www.cnblogs.com/qigang/p/3841934.html