您的位置:首页 > 编程语言 > C#

C#学习——构造函数和析构函数

2016-02-19 15:10 513 查看

构造函数和析构函数

构造函数:

定义:

构造函数是一种特殊的方法。也叫构造方法,主要用来在创建对象时初始化,并且可以在构造函数中对对象进行初始化,总与new运算符一起使用。构造函数是用来创建对象的特殊方法,方法名和类名一样,没有返回值,连void都不用。但构造函数可以有参数,new对象的时候传递函数参数即可。

如果不指定构造函数,则类中会自动生成一个默认的无参构造函数,如果指定了构造函数,则不再有默认的无参构造函数,如果需要无参的构造函数就需要自己来写。

构造函数的重载:

构造函数可以重载,也就是多个参数不同的构造函数,类似于方法的重载。其中方法的重载已经在前边的博客方法函数中讲过了。

例子:先写一个学生类,给这个学生类添加构造方法,使在实例化学生类的时候可以通过构造方法对姓名、性别、年龄、语文、数学、英语等属性赋值,也可以只对姓名和性别赋值。年龄默认为18岁,其余成绩默认为0分。代码如下:

Student类中的代码:

public class Student
    {
        public Student (string name,int age,char gender,int chinese,int english,int math)
        {
            this._name = name;
            this._Age = age;
            this._Gender = gender;
            this._chinese = chinese;
            this._math = math;
            this._english = english;
        }
        public Student (string name,int age)
        {
            this._name =name;
            this._Age=age;
        }

        //以上两个构造函数的重载。两个方法中的参数个数不同

        string _name;    
        public string Name
        {
            get { return _name; }   //设置姓名属性为只读
        }
        int _Age=18;
        public int Age
        {
            get { return _Age; }    //设置年龄为只读
        }
        char _Gender;
        public char Gender
        {
            get { return _Gender; }   //性别为只读
        }

        int _chinese;
        public int chinese  //设置语文成绩属性
        {
            get { return _chinese; }    

        }

        int _math;
        public int math   //设置数学成绩属性
        {
            get { return _math; }
        }

        int _english;
        public int english   //设置英语成绩属性
        {
            get { return _english; }
        }

        public void say()   //定义一个方法显示
        {
            Console.WriteLine("我叫{0},今年{1}岁,是{2}生,语文{3},数学{4},英语{5}",this.Name ,this.Age  ,this.Gender ,this.chinese ,this.math,this.english );
            //Console.ReadKey();
        }

    }
客户端的代码如下:

class Program
    {
        static void Main(string[] args)
        {
           
            Student stu = new Student("zhangsan", 16, '男', 28, 45, 67);  //student类的实例化,显示全部
            stu.say();  //调用方法显示
            Console.WriteLine("=================");
            Student xlstu = new Student("xiaohong",13);  //student类的另一个实例化,显示部分,用的构造函数的重载。
            xlstu.say();  //调用方法显示
            Console.ReadKey();
        }
    }


析构函数:

析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。

析构函数名也应与类名相同,只是在函数名前面加一个位取反符~,例如~stud( ),以区别于构造函数。它不能带任何参数,也没有返回值(包括void类型)。只能有一个析构函数,不能重载。如果用户没有编写析构函数,编译系统会自动生成一个缺省的析构函数(即使自定义了析构函数,编译器也总是会为我们合成一个析构函数,并且如果自定义了析构函数,编译器在执行时会先调用自定义的析构函数再调用合成的析构函数),它也不进行任何操作。所以许多简单的类中没有用显示的析构函数。

析构函数是不太常用的,在这里不再举例子讲述。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: