程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#類型成員樣式

C#類型成員樣式

編輯:C#入門知識

靜態成員

使用關鍵字“static”修飾的類型成員就是靜態的,類型的字段、屬性、方法、事件、構造函數都可以是靜態的。例如在上面的PeopleClass中使用了以下代碼定義了一個靜態方法。
publicstaticint CalculateAge( DateTime birthday )  {      returnDateTime.Now.Subtract(birthday).Days / 365;  }
        這個靜態方法就是能根據生日計算周歲數的。由於計算周歲是一個通用的算法,並不局限於某個特定的對象,因此可以將其定義為靜態類。
靜態成員類型無需創建對象實例即可通過“類型名稱.成員名”的方式調用。比如以下代碼就能調用CalculateAge方法。
DateTime dtm = newDateTime(1980, 2, 14);  int age = PeopleClass.CalculateAge(dtm); 
        對於靜態類型,通過“實例變量.成員名”的方式反而不能調用,比如以下的代碼是錯誤的。
PeopleClass instance = newPeopleClass();  DateTime dtm = newDateTime(1980, 2, 14);  int age = instance.CalculateAge(dtm); 
        注意調用靜態成員C#和VB.NET語法有些差別。在VB.NET中,可以使用“派生的類型名稱.成員名”來調用靜態成員,但C#不支持。比如在類型A中定義了靜態成員M,而從類型A之上派生了類型B,則在VB.NET中可以使用“A.M”或者“B.M”來調用靜態成員,但在C#中不能用“B.M”這種寫法。
例如以下代碼中定義了靜態方法“Sum”和靜態字段“Value”,
publicclassMyClass  {      public static int Value = 100 ;      publicstaticint Sum(int a, int b)      {          return a + b;      }  }
        這樣我們就可以使用“MyClass.Sum”來調用這個方法而無需創建對象實例。若還從這個類型派生了新類型,其代碼如下
publicclassOtherClass : MyClass  {  } 
        則在C#中只能使用“MyClass.Sum”來調用這個靜態方法,而在VB.NET中可以有“MyClass.Sum”和“OtherClass.Sum”兩種方式來調用這個靜態方法。
 
靜態字段
        對於靜態字段,是可以賦值的,而且靜態字段作用范圍是整個程序,相當於全局變量,比如在任意地方修改了此處的靜態變量“Value”的值後,其他地方獲得的字段值就是修改後的值。
 
靜態構造函數
        被“static”修飾的無參數構造函數就是類型的靜態構造函數,例如對於上面的PeopleClass類型中就使用了以下代碼定義了一個靜態構造函數。
static PeopleClass()  {      System.Console.WriteLine("Start");  } 
        在程序加載的時候,若程序沒有調用PeopleClass中的成員,靜態構造函數不會被調用,甚至使用typeof操作也不會調用;但程序中第一次引用了類型的某個成員或者創建了對象實例前,系統會自動的調用一次類型的靜態構造函數,而且整個軟件運行期間,某個類型的靜態構造函數只可能調用一次,不會被重復調用的。
靜態構造函數適用於延時進行系統初始化的操作,這能加快系統的啟動速度。
 
        注意,靜態構造函數必須是沒有參數的,而且肯定是私有的,不能設置可訪問級別。
 
實例成員
        沒有被“static”關鍵字修飾的類型成員就是實例成員,比如PeopleClass類型中定義了一個ToString方法,其代碼如下。
publicoverridestring ToString()  {      return _Code + " " + _Name;  } 
        此時不能用“PeopleClass.ToString”來調用這個方法,必須首先創建對象實例,然後調用這個對象實例的方法,其演示代碼如下
PeopleClass instance = newPeopleClass( );  instance.ToString( ) ; 
虛擬成員
        被關鍵字“virtual”修飾的成員類型是虛擬成員,比如以下代碼就包含了一個名為“Sum”的虛擬函數。
publicclassMyClass  {      public virtual int Sum(int a, int b)      {          return a + b;      }  } 
        其實虛擬成員並不虛擬,它可以包含實質性的功能代碼,能完成一定的功能。只不過虛擬成員可以方便的被重載而已,繼承者也可以根據需要不重載這些虛擬方法。
 
抽象成員
被關鍵字“abstract”修飾的類型成員就是抽象成員。抽象成員只能是屬性、方法和索引器。以下代碼就定義了一個抽象方法。
publicabstractint Sum(int a, int b) ; 
        在這段代碼中,“public”說明方法是公開的;“abstract”說明這是一個抽象的成員;“int”為方法的返回值類型;“Sum”為方法的名稱;“int a , int b”為方法的參數列表。
         定義抽象類型和定義接口的方法類似,只需要寫出成員的聲明即可,但還需要寫出抽象成員的可訪問性。
        抽象成員必須出現在抽象類中,而且在從抽象類派生新類型時,所有的抽象方法必須重寫以填充方法體。[袁永福版權所有]
 
抽象成員和虛擬成員是有區別的,抽象成員不能定義任何實質的功能,必須被重載;而虛擬成員必須包含完整的代碼結構,可以包含實質功能,可以不被重載。
常數成員
被關鍵字“const”修飾的成員字段為常數字段,可以使用“類型名稱.字段名”來引用常數。比如以下代碼就包含了一個常數
publicclassMyClass  {      publicconstdouble PI = 3.1415926;  } 
        對此我們可以使用“MyClass.PI”來獲得這個常數值。常數值是不能修改的,比如對於賦值代碼“MyClass.PI = 3.14;”就是錯誤的;相對於的,靜態字段是可以被修改的,比如此處使用代碼“publicstaticdouble PI = 3.1415926;”來定義這個字段,則就可以對這個字段賦值了。

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