[畢業(yè)生的商業(yè)軟件開發(fā)之路]C#類型樣式
近期開始接觸到在校學生、高校實習生和畢業(yè)生,在此說一下筆者對這些徘徊在職場門口的學生一些建議,希望能給這些初學者進入軟件開發(fā)行業(yè)帶來一些幫助,使得畢業(yè)生能更順利的進入軟件開發(fā)公司開始職場生涯,人生來一個完美的轉彎。
------------------------------------------------------------------------------------
在定義類型的時候可以指定類型的一些特性,這些樣式有
static class 靜態(tài)類
被“static”修飾的類就是靜態(tài)類型,靜態(tài)類型其所有的成員都必須標記為靜態(tài)的,否則會編譯錯誤。靜態(tài)類型一般用于容納一些通用的例程,比如某些科學數(shù)值運算等。
以下C#代碼就定義了一個靜態(tài)類型
|
public static class MyStaticClass
{
public static int Sum(int a, int b)
{
return a + b;
}
} |
在代碼“public static class MyStaticClass”中,“public”定義類型為公開的,“static”說明該類型是靜態(tài)的,“class”說明正在定義一個類類型,“MyStaticClass”是類型名稱。
在這個類型中定義了一個靜態(tài)方法Sum,在靜態(tài)類型中不能定義非靜態(tài)的成員。由于類型的構造函數(shù)也是靜態(tài)的,因此靜態(tài)類型不能實例化。
關于靜態(tài)方法可參考下節(jié)。
abstract class 抽象類
被“abstract”修飾的類就是抽象類,抽象類是一種介于類和接口之間的類型,定義為抽象類說明其有部分內容尚未實現(xiàn),有待以后被繼承被擴展。以下代碼就定義了一個抽象類
|
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”就聲明該成員為抽象成員,抽象成員只能留個定義,不能有任何功能實現(xiàn)代碼,因此在這里聲明一下Sum方法就用分號結束了定義。
抽象類可以包含不抽象的方法,比如此處包含了一個完整的Div成員方法。。
抽象類不能實例化,對于類型“我的抽象類”,代碼“MyAbstractClass instance = new MyAbstractClass( )”是錯誤的,抽象類必須派生出其他類型才能使用;而且派生的時候,所有的抽象成員必須強制被重寫。由于抽象類必須被重載,因此抽象類不能是密封類,也就是說關鍵字“abstract”和“sealed”是相互排斥的。
以下代碼就從抽象類“MyAbstractClass”派生新的類型
|
public class MyClassFromMyAbstractClass : MyAbstractClass
{
public override int Sum(int a, int b)
{
return a + b;
}
} |
由于從抽象類派生新類型時,開發(fā)人員可能忘記抽象類中定義的抽象成員,此時VS.NET的C#代碼編輯器提供幫助功能,這個和幫助生成實現(xiàn)接口的功能類型,如下圖所示

當文本光標移動到方框處的“MyAbstractClass”,則左下角出現(xiàn)一個智能標簽,鼠標點擊這個智能標簽會彈出一個菜單,點擊菜單項目“實現(xiàn)抽象類“MyAbstractClass””就會自動生成以下代碼。[袁永福版權所有]
|
public class MyClassFromMyAbstractClass : MyAbstractClass
{
public override int Sum(int a, int b)
{
throw new NotImplementedException();
}
} |
這個時候開發(fā)人員就可以往重載的成員中添加功能代碼了。
由于抽象類型不能實例化,因此必須借助它的派生類型才能使用,比如以下的代碼
|
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;
}
} |
由于密封類不能被繼承,不能被擴展,這可能會影響系統(tǒng)的擴展性,因此慎用,在實際中用得比較少。[袁永福版權所有]
posted on 2011-08-02 09:42 袁永福 電子病歷,醫(yī)療信息化 閱讀(602) 評論(1) 收藏 舉報
浙公網安備 33010602011771號