程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 深入解析C#編程中的事件(4)

深入解析C#編程中的事件(4)

編輯:關於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() 被用來創建B的實例時,產生下面的輸出:

x = 1, y = 0

因為變量初始化函數在基類構造函數被調用前執行,所以x的數值是1。可是,y的數值是0(int的默認數值),這是因為對y的賦值直到基類構造函數返回才被執行。

默認構造函數

如果一個類不包含任何構造函數聲明,就會自動提供一個默認的構造函數。默認的構造函數通常是下面的形式

public C(): base() {}

這裡C是類的名稱。默認構造函數完全調用直接基類的無參數構造函數。如果直接基類中沒有可訪問的無參數構造函數,就會發生錯誤。在例子中

class Message
{
 object sender;
 string text;
}

因為類不包含構造函數聲明,所以提供了一個默認構造函數。因此,這個例子正好等同於

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

私有構造函數

當一個類只聲明了私有的構造函數時,其他類就不能從這個類派生或創建類的實例。私有構造函數通常用在只包含靜態成員的類中。例如:

public class Trig
{
private Trig() {} // Prevent instantiation
public const double PI = 3.14159265358979323846;
public static double Sin(double x) {...}
public static double Cos(double x) {...}
public static double Tan(double x) {...}
}

Trig 類提供了一組相關的方法和常數,但沒有被例示。因此,它聲明了一個單獨的私有構造函數。注意至少要必須聲明一個私有構造函數來避免自動生成默認的構造函數(它通常有公共的訪問性)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved