熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C#類型成員樣式

2013-11-13 09:52:42  來源: .NET編程 

  靜態成員


        使用關鍵字static修飾的類型成員就是靜態的類型的字段屬性方法事件構造函數都可以是靜態的例如在上面的PeopleClass中使用了以下代碼定義了一個靜態方法

  


    publicstaticint CalculateAge( DateTime birthday )  
    {  
        returnDateTimeNowSubtract(birthday)Days / ;  


        這個靜態方法就是能根據生日計算周歲數的由於計算周歲是一個通用的算法並不局限於某個特定的對象因此可以將其定義為靜態類
靜態成員類型無需創建對象實例即可通過類型名稱成員名的方式調用比如以下代碼就能調用CalculateAge方法

  


    DateTime dtm = newDateTime(  );  
    int age = PeopleClassCalculateAge(dtm);  


        對於靜態類型通過實例變量成員名的方式反而不能調用比如以下的代碼是錯誤的

  


    PeopleClass instance = newPeopleClass();  
    DateTime dtm = newDateTime(  );  
    int age = instanceCalculateAge(dtm);  


        注意調用靜態成員C#和VBNET語法有些差別在VBNET中可以使用派生的類型名稱成員名來調用靜態成員但C#不支持比如在類型A中定義了靜態成員M而從類型A之上派生了類型B則在VBNET中可以使用AM或者BM來調用靜態成員但在C#中不能用BM這種寫法
例如以下代碼中定義了靜態方法Sum和靜態字段Value

  


    publicclassMyClass  
    {  
        public static int Value =  ;  
        publicstaticint Sum(int a int b)  
        {  
            return a + b;  
        }  


        這樣我們就可以使用MyClassSum來調用這個方法而無需創建對象實例若還從這個類型派生了新類型其代碼如下

  


    publicclassOtherClass : MyClass  
    {  
    }  


        則在C#中只能使用MyClassSum來調用這個靜態方法而在VBNET中可以有MyClassSumOtherClassSum兩種方式來調用這個靜態方法
 
靜態字段
        對於靜態字段是可以賦值的而且靜態字段作用范圍是整個程序相當於全局變量比如在任意地方修改了此處的靜態變量Value的值後其他地方獲得的字段值就是修改後的值
 
靜態構造函數
        被static修飾的無參數構造函數就是類型的靜態構造函數例如對於上面的PeopleClass類型中就使用了以下代碼定義了一個靜態構造函數

  


    static PeopleClass()  
    {  
        SystemConsoleWriteLine(Start);  
    }  


        在程序加載的時候若程序沒有調用PeopleClass中的成員靜態構造函數不會被調用甚至使用typeof操作也不會調用但程序中第一次引用了類型的某個成員或者創建了對象實例前系統會自動的調用一次類型的靜態構造函數而且整個軟件運行期間某個類型的靜態構造函數只可能調用一次不會被重復調用的
靜態構造函數適用於延時進行系統初始化的操作這能加快系統的啟動速度
 
        注意靜態構造函數必須是沒有參數的而且肯定是私有的不能設置可訪問級別
 
實例成員
        沒有被static關鍵字修飾的類型成員就是實例成員比如PeopleClass類型中定義了一個ToString方法其代碼如下

  


    publicoverridestring ToString()  
    {  
        return _Code +   + _Name;  
    }  


        此時不能用PeopleClassToString來調用這個方法必須首先創建對象實例然後調用這個對象實例的方法其演示代碼如下

  


    PeopleClass instance = newPeopleClass( );  
    instanceToString( ) ;  


虛擬成員
        被關鍵字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 = ;  
    }  


        對此我們可以使用MyClassPI來獲得這個常數值常數值是不能修改的比如對於賦值代碼MyClassPI = ;就是錯誤的相對於的靜態字段是可以被修改的比如此處使用代碼publicstaticdouble PI = ;來定義這個字段則就可以對這個字段賦值了
From:http://tw.wingwit.com/Article/program/net/201311/11840.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.