一、C#書寫規(guī)范
Pascal大小寫(標(biāo)識(shí)符中每個(gè)單詞首字母大寫):類、方法、命名空間、屬性和公共字段
Camel大小寫(標(biāo)識(shí)符中每個(gè)單詞首字母大寫,第一個(gè)單詞除外):局部變量、形參
下劃線加Camel大小寫:私有字段和受保護(hù)的字段
以大寫的I開始:接口名稱
我認(rèn)為養(yǎng)成良好的編程習(xí)慣,按照規(guī)范來書寫是很有必要的,所以把書寫規(guī)范列在了第一條。
二、類
對于所有的面向?qū)ο蟮恼Z言,類都是很重要的主題。
程序的數(shù)據(jù)和功能被組織為邏輯上相關(guān)的數(shù)據(jù)項(xiàng)和函數(shù)的封裝集合,并被稱為類。
類是一個(gè)能儲(chǔ)存數(shù)據(jù)并執(zhí)行代碼的數(shù)據(jù)結(jié)構(gòu)。它包含數(shù)據(jù)成員和函數(shù)成員:
數(shù)據(jù)成員:字段、常量
函數(shù)成員:方法、屬性、構(gòu)造函數(shù)、析構(gòu)函數(shù)、運(yùn)算符、索引器、事件
關(guān)于類主要講一下以下幾個(gè)方面:
1、屬性
剛接觸C#的時(shí)候一直搞不清楚屬性和字段有什么區(qū)別,覺得既然有了字段為何還要有屬性。按我的理解,屬性是一種方法,對字段進(jìn)行了封裝,以避免字段直接暴露給程序員使用。屬性不具備存儲(chǔ)能力,必須使用字段作為存儲(chǔ)。通常做法是:
(1)將字段聲明為private,將屬性聲明為public。
(2)采用相同的名稱,不同的書寫方法,如字段:_myValue,屬性:MyValue。
之所以要有屬性,是因?yàn)槠渚邆溆?jì)算能力和可設(shè)置為只讀或只寫。
假設(shè)我們需要一個(gè)不大于100的數(shù)值,為了避免客戶輸入數(shù)字的超出范圍,我們需要過濾掉無效輸入:
private int _theValue = 10;
int TheValue
{
set{_theValue = value>100?100:value;}//如果輸入值大于100,則將_theValue設(shè)為100.
get{return _theValue;}
}
只有g(shù)et訪問器的屬性稱為只讀屬性,只有set訪問器的屬性稱為只寫屬性:
int MyValue//只讀屬性
{
get{...}
}
int MyValue//只寫屬性
{
set{...}
}
每個(gè)屬性都要被關(guān)聯(lián)到后備字段,每次去聲明字段會(huì)顯得很繁瑣,C#提供了自動(dòng)實(shí)現(xiàn)屬性,允許只聲明屬性而不聲明后備字段:
Class C1
{
public int MyValue{get;set;}
}
2、方法
方法就是函數(shù),有形參和實(shí)參,至于具體結(jié)構(gòu)形式這里就不展開講了,這里只講一點(diǎn),那就是可選參數(shù)。
C#允許可選參數(shù),所謂可選參數(shù)就是我們可以在調(diào)用方法的時(shí)候包含這個(gè)參數(shù),也可以省略它。
這個(gè)可選參數(shù)有什么用呢?這里舉個(gè)例子說明。
假設(shè)我們要設(shè)計(jì)一個(gè)串口設(shè)置串口參數(shù)的方法:SPSet()
串口參數(shù)有:串口號(hào)、波特率、數(shù)據(jù)位、停止位、校驗(yàn)位
以上有五個(gè)參數(shù),如果每次調(diào)用都要輸入五個(gè)參數(shù)會(huì)顯得很繁瑣,而我們一般常需要設(shè)置的參數(shù)串口號(hào)和波特率,所以可以將后三個(gè)參數(shù)設(shè)置為可選參數(shù),如下:
void SPSet(string portName,int baudRate,int dataBits = 8,int stopBits = 1,string parity = "None")
{...}
這樣在調(diào)用SPSet()方法的時(shí)候,只需要傳前兩個(gè)參數(shù)就可以了,后面的參數(shù)可以省略。
3、訪問修飾符
類和類的成員都有訪問修飾符,在這里做一個(gè)總結(jié):
類的可訪問性有兩個(gè)級別:public和internal。
標(biāo)記為public的類可以被系統(tǒng)內(nèi)任何程序集中的代碼訪問。
標(biāo)記為internal的類只能被它自己所在的程序集內(nèi)的類看到。
成員訪問修飾符有:public、private、protected、internal、protected internal
private:只在類的內(nèi)部可訪問
internal:對該程序集類所有類可訪問
protected:對所有繼承該類的類可訪問
protected internal:對所有繼承該類的類或在該程序集內(nèi)聲明的類可訪問
public:對任何類可訪問