当前位置:首页 > C#学习 > 正文内容

C# 构造函数this关键字和析构函数

小道6年前 (2018-11-30)C#学习4113

(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);
        }
    }
}

输出结果:

image.png

扫描二维码推送至手机访问。

版权声明:本文由小道发布,如需转载请注明出处。

本文链接:https://www.daobk.com/post/126.html

分享给朋友:

“C# 构造函数this关键字和析构函数” 的相关文章

机器人:具有模糊判断

机器人:具有模糊判断

自己动手写聊天机器人,能够回答不同城市的天气、回答感情问题、问的次数过多还会饿死,提问可以模糊提问(包含指定关键词)。问“天气:北京”就回复“今天北京天气很好。”。        static void&nbs...

异常与异常处理

异常与异常处理

传统的错误表示方式:错误码。举例。需要知道不同错误码的含义,如果不处理错误码,则程序可能陷入不可以预置的错误。陈摄影师以为文件已经被删除造成的麻烦。错误码的缺点:不处理则很难发现,每次处理则很麻烦;难以看出错误的原因;容易使得程序进入不确定状态。try catch。Exception ex 异常也是...

静态成员和静态类

静态成员和静态类

全局变量。static类变量。不用new就能用的方法:static方法,static方法其实就是普通函数在static方法中可以调用其他static成员,但是不能调用非static成员。在非static方法中可以调用static成员。    class&nbs...

命名空间namespace

命名空间namespace

namespace(命名空间),用于解决类重名问题,可以看做“类的文件夹”。在代码中使用其他类的时候需要using类所在的namespace。System.Collections.ArrayList,快速引入的方法,右键→解析(Ctrl+.)。为什么使用Convert、Console等类不需要自己写...