C#學習筆記——建構函式與解構函式

來源:互聯網
上載者:User

一、原理:
        建構函式一般用來初始化對像的.   和類同名;
        解構函式是銷毀對像佔用的資源的   ,在類名前一個 “ ~ ”
        當對象被建立時,建構函式被自動執行。當對象消亡時,解構函式被自動執行。
一個簡單的執行個體:
    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類的解構函式!

 

總結:程式執行時,對於靜態建構函式:先執行自己的靜態建構函式再執行父類的建構函式,

執行執行個體建構函式時,先執行父類的執行個體建構函式,再執行自己的執行個體建構函式

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.