zoukankan      html  css  js  c++  java
  • C#学习笔记——构造函数与析构函数

    一、原理:
            构造函数一般用来初始化对像的.   和类同名;
            析构函数是销毁对像占用的资源的   ,在类名前一个 “ ~ ”
            当对象被创建时,构造函数被自动执行。当对象消亡时,析构函数被自动执行。
    一个简单的实例:
        class   cls s
    {
          public   cls(){}
          public   ~cls(){}

    }

    二、命名规则
         1.构造函数的名字与类同名
         2.无返回值类型(这与返回值类型为void的函数不同)
     

    三、几种常用构造函数举例
        1.缺省构造函数(它由系统(CLR)提供)。
    class TestClass
    {
     public TestClass(): base() {} // 由CLR提供
    }

        2.实例构造函数(实例构造函数是实现对类中实例进行初始化的方法成员)。如:
    using System;
    class Point
    {
     public double x, y;
     public Point()
     {
      this.x = 0;
      this.y = 0;
     }
     public Point(double x, double y)
     {
      this.x = x;
      this.y = y;
     }
     …
    }
    class Test
    {
     static void Main()
     {                         
      Point a = new Point();
      Point b = new Point(3, 4); // 用构造函数初始化对象
      …
     }
    }

         3.静态构造函数
         静态构造函数是实现对一个类进行初始化的方法成员。它一般用于对静态数据的初始化。
         静态构造函数不能有参数,不能有修饰符而且不能被调用,当类被加载时,类的静态构造函数自动被调用。


    四.析构函数和垃圾回收器在C#中的运用
         析构函数是实现销毁一个类的实例的方法成员。
      析构函数不能有参数,不能任何修饰符而且不能被调用。
         由于析构函数的目的与构造函数的相反,就加前缀‘~’以示区别。
    public class ResourceHolder
    {

    ~ResourceHolder()
    {
     // 这里是清理非托管资源的用户代码段
    }
    }


    对于调用的优先顺序,实例如下:
      class Program
        {
            static void Main(string[] args)
            {
                C c = new C();
                GG.C();
            }
            public static class GG
            {
                static GG()//静态构造函数中不能有访问修饰符,默认为私有构造函数,这也是私有构造函数的用法。
                {
                    Console.WriteLine("静态类GG!");
                }
                public static void C()
                {
                    Console.WriteLine("静态类GG的静态方法");
                }
                /*
            ~GG()   //静态类不能包含析构函数
            {
                Console.WriteLine("静态类S的析构函数!");
            }
                
                
                 */
            }
            public class A
            {
                static A()
                {
                    Console.WriteLine("A类的静态构造函数!");
                }
                public  A()
                {
                    Console.WriteLine("A类的实例构造函数!");
                }
                ~ A()
                {
                    Console.WriteLine("A类的析构函数!");
                }
            }
            public class B:A
            {
                static B()
                {
                    Console.WriteLine("B:A的静态构造函数!");
                }
                public B()
                {
                    Console.WriteLine("B:A的实例构造函数!");
                }
                ~B()
                {
                    Console.WriteLine("B:A的析构函数");
                }
            }
            public class C : B
            {
                static C()
                {
                    Console.WriteLine("C继承B的静态构造函数!");
                }
                public C()
                {
                    Console.WriteLine("静态类的静态构造函数!");
                }
               ~ C()
               {
                   Console.WriteLine("C:B的构造函数! ");
               }
            }
        }

    执行结果如下:

    C:B类的静态构造函数!

    B:A类的静态构造函数!

    A类的静态构造函数!

    A类的实例构造函数!

    B:A类的实例构造函数!s

    C:B类的实例构造函数!

    静态类GG!//

    静态类GG的静态方法!

    C:B类的析构函数!

    B:A类的析构函数!

    A类的析构函数!

    总结:程序执行时,对于静态构造函数:先执行自己的静态构造函数再执行父类的构造函数,

    执行实例构造函数时,先执行父类的实例构造函数,再执行自己的实例构造函数

  • 相关阅读:
    android 仿微信聊天界面,以及语音录制功能
    程序员的鄙视链
    Spring 4 官方文档学习(十一)Web MVC 框架之URI Builder
    Spring 4 官方文档学习(十一)Web MVC 框架之Flash Attributes
    Spring 4 官方文档学习(十一)Web MVC 框架之resolving views 解析视图
    JDK中的序列化和反序列化
    HTTP/1.1 学习
    HttpComponents 基础接口/类与HTTP message的对应关系
    Apache HttpComponents 学习
    HttpClient学习之 客户端HTTP编程入门
  • 原文地址:https://www.cnblogs.com/jane_shi/p/1904829.html
Copyright © 2011-2022 走看看