C# 构造函数this关键字和析构函数
(1)构造函数
<1>除非是static,否则编译器将会给每一个没有构造函数的类指定一个默认的构造函数
<2>构造函数private时候,类不能被实例化
<3>派生类可以通过base来显式的调用基类的构造函数,当无显式调用时,编译器会自动的调用基类的默认构造函数
<4>基类没有默认构造函数,派生类必须显式的调用base
<5>构造函数可以标记为 public,protected,private,internal,protected internal
<6>实例构造函数,静态构造函数。初始化静态类或者非静态类中的静态变量就必须定义静态构造函数。
<7>私有构造函数
私有构造函数存在的意义是为了防止被实例化,当一个类不想被声称为静态类,同时里面都是静态成员时候,可以使用静态构造函数。
析构函数:
1)不能在结构中定义析构函数。只能对类使用析构函数。
2)一个类只能有一个析构函数。
3)无法继承或重载析构函数。
4)无法调用析构函数。它们是被自动调用的。
5)析构函数既没有修饰符,也没有参数。
using System; namespace 析构函数 { class Program { static void Main(string[] args) { Person P1 = new Person("张三",20,1,'男'); P1.Say(); Person P2 = new Person("小花",'女'); P2.Say(); Console.ReadKey(); } } class Person { private string _name;//字段 private int _age;//字段 private int _num;//字段 private char _gender;//字段 public Person(string name,int age,int num,char gender)//构造函数 { this.Name = name; this.Age = age; this.Num = num; this.Gender = gender; } public Person(string name,char gender):this(name,18,0,gender)//通过使用this关键字调用上面的构造函数(参数要对应),来使用构造函数。好处可以减少多余代码. { } ~Person()//析构函数 { Console.WriteLine("析构函数,主要用于释放资源。"); Console.ReadKey(); } public string Name//属性 { get { return _name; } set { _name = value; } } public int Age//属性 { get { return _age; } set { _age = value; } } public int Num//属性 { get { return _num; } set { _num = value; } } public char Gender//属性 { get { return _gender; } set { if (value !='男'&&value!='女') { _gender = '无'; } _gender = value; } } public void Say()//方法 { Console.WriteLine("我叫{0},今年{1}岁,我是第{2}号,我是{3}生.",Name,Age,Num,Gender); } } }
输出结果: