天天看點

[畢業生的商業軟體開發之路]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();  

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”兩種方式來調用這個靜态方法。

<b>靜态字段</b>

        對于靜态字段,是可以指派的,而且靜态字段作用範圍是整個程式,相當于全局變量,比如在任意地方修改了此處的靜态變量“Value”的值後,其他地方獲得的字段值就是修改後的值。

<b>靜态構造函數</b>

        被“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( ) ;  

<b>虛拟成員</b>

        被關鍵字“virtual”修飾的成員類型是虛拟成員,比如以下代碼就包含了一個名為“Sum”的虛拟函數。

    public virtual int Sum(int a, int b)  

        其實虛拟成員并不虛拟,它可以包含實質性的功能代碼,能完成一定的功能。隻不過虛拟成員可以友善的被重載而已,繼承者也可以根據需要不重載這些虛拟方法。

<b>抽象成員</b>

被關鍵字“abstract”修飾的類型成員就是抽象成員。抽象成員隻能是屬性、方法和索引器。以下代碼就定義了一個抽象方法。

publicabstractint Sum(int a, int b) ;  

        在這段代碼中,“public”說明方法是公開的;“abstract”說明這是一個抽象的成員;“int”為方法的傳回值類型;“Sum”為方法的名稱;“int a , int b”為方法的參數清單。

         定義抽象類型和定義接口的方法類似,隻需要寫出成員的聲明即可,但還需要寫出抽象成員的可通路性。

        抽象成員必須出現在抽象類中,而且在從抽象類派生新類型時,所有的抽象方法必須重寫以填充方法體。[袁永福版權所有]

抽象成員和虛拟成員是有差別的,抽象成員不能定義任何實質的功能,必須被重載;而虛拟成員必須包含完整的代碼結構,可以包含實質功能,可以不被重載。

被關鍵字“const”修飾的成員字段為常數字段,可以使用“類型名稱.字段名”來引用常數。比如以下代碼就包含了一個常數

    publicconstdouble PI = 3.1415926;  

        對此我們可以使用“MyClass.PI”來獲得這個常數值。常數值是不能修改的,比如對于指派代碼“MyClass.PI = 3.14;”就是錯誤的;相對于的,靜态字段是可以被修改的,比如此處使用代碼“publicstaticdouble PI = 3.1415926;”來定義這個字段,則就可以對這個字段指派了。

     本文轉自xdesigner 51CTO部落格,原文連結:http://blog.51cto.com/xdesigner/631000,如需轉載請自行聯系原作者

繼續閱讀