首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 事件深度解析(四):實例欄位初始化順序、預設建構函式與私有建構函式

     編輯:關於C語言

實例欄位初始化器執行時機

欄位初始化器會在基底類別建構函式呼叫之前執行,確保所有實例欄位在任何存取實例的語句執行前完成初始化:

class A
{
    public A() { PrintFields(); }
    public virtual void PrintFields() { }
}
class B : A
{
    int x = 1;
    int y;
    public B() { y = -1; }
    public override void PrintFields() { Console.WriteLine("x = {0}, y = {1}", x, y); }
}

// new B() 輸出:x = 1, y = 0
// 原因:x 初始化器在 base() 前執行;y 賦值在 base() 後執行,故仍為預設值 0

預設建構函式

類別無任何建構函式宣告時,編譯器自動提供:

public C() : base() { } // C 為類別名稱

若基底類別無可存取的無參數建構函式則報錯。等同於:

class Message
{
    object sender;
    string text;
    // 隱含 public Message() : base() { }
}

私有建構函式

僅宣告私有建構函式可防止外部實例化與繼承,常用於純靜態工具類別:

public class Trig
{
    private Trig() { } // 防止實例化
    public const double PI = 3.14159265358979323846;
    public static double Sin(double x) { ... }
    public static double Cos(double x) { ... }
    public static double Tan(double x) { ... }
}

至少需宣告一個私有建構函式,否則編譯器仍會產生公用預設建構函式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved