近期開始接觸到在校學生、高校實習生和畢業生,在此說一下筆者對這些徘徊在職場門口的學生一些建議,希望能給這些初學者進入軟體開發行業帶來一些協助,使得畢業生能更順利的進入軟體開發公司開始職場生涯,人生來一個完美的轉彎。
------------------------------------------------------------------------------------
類型樣式
在定義類型的時候可以指定類型的一些特性,這些樣式有
static class 靜態類被“static”修飾的類就是靜態類型,靜態類型其所有的成員都必須標記為靜態,否則會編譯錯誤。靜態類型一般用於容納一些通用的常式,比如某些科學數值運算等。以下C#代碼就定義了一個靜態類型
public static class MyStaticClass{ public static int Sum(int a, int b) { return a + b; }} |
在代碼“public static class MyStaticClass”中,“public”定義類型為公開的,“static”說明該類型是靜態,“class”說明正在定義一個類類型,“MyStaticClass”是類型名稱。在這個類型中定義了一個靜態方法Sum,在靜態類型中不能定義非靜態成員。由於類型的建構函式也是靜態,因此靜態類型不能執行個體化。關於靜態方法可參考下節。
abstract class 抽象類別被“abstract”修飾的類就是抽象類別,抽象類別是一種介於類和介面之間的類型,定義為抽象類別說明其有部分內容尚未實現,有待以後被繼承被擴充。以下代碼就定義了一個抽象類別
public abstract class MyAbstractClass{ public abstract int Sum(int a, int b); public int Div(int a, int b) { return a / b; }} |
在代碼“public abstract class MyAbstractClass”中,關鍵字“abstract”就聲明了該類型為抽象類別;在代碼“public abstract int Sum(int a, int b);”中,關鍵字“abstract”就聲明該成員為抽象成員,抽象成員只能留個定義,不能有任何功能實現代碼,因此在這裡聲明一下Sum方法就用分號結束了定義。抽象類別可以包含不抽象的方法,比如此處包含了一個完整的Div成員方法。。抽象類別不能執行個體化,對於類型“我的抽象類別”,代碼“MyAbstractClass instance = new MyAbstractClass( )”是錯誤的,抽象類別必須派生出其他類型才能使用;而且派生的時候,所有的抽象成員必須強制被重寫。由於抽象類別必須被重載,因此抽象類別不能是密封類,也就是說關鍵字“abstract”和“sealed”是相互排斥的。以下代碼就從抽象類別“MyAbstractClass”派生新的類型
public class MyClassFromMyAbstractClass : MyAbstractClass{ public override int Sum(int a, int b) { return a + b; }} |
由於從抽象類別派生新類型時,開發人員可能忘記抽象類別中定義的抽象成員,此時VS.NET的C#代碼編輯器提供協助功能,這個和協助產生實現介面的功能類型,如所示 當文本游標移動到方框處的“MyAbstractClass”,則左下角出現一個智能標籤,滑鼠點擊這個智能標籤會彈出一個菜單,點擊功能表項目“實現抽象類別“MyAbstractClass””就會自動產生以下代碼。[袁永福著作權]
public class MyClassFromMyAbstractClass : MyAbstractClass{ public override int Sum(int a, int b) { throw new NotImplementedException(); }} |
這個時候開發人員就可以往重載的成員中添加功能代碼了。由於抽象類別型不能執行個體化,因此必須藉助它的衍生類別型才能使用,比如以下的代碼
MyAbstractClass instance = new MyClassFromMyAbstractClass();instance.Div(1, 2);instance.Sum(3, 4); |
當然衍生類別型可以獨立使用,如以下代碼
MyClassFromMyAbstractClass instance2 = new MyClassFromMyAbstractClass();instance2.Div(1, 2);instance2.Sum(3, 4); |
sealed class 密封類被關鍵字“sealed”修飾的類是密封類,密封類可以繼承自其它類,但不能被繼承,不能包含虛方法和抽象方法。以下代碼就定義了一個密封類
public sealed class MySealedClass{ public int Sum(int a, int b) { return a + b; }} |
由於密封類不能被繼承,不能被擴充,這可能會影響系統的擴充性,因此慎用,在實際中用得比較少。[袁永福著作權]