2.1、C#語(yǔ)法概述
( 1 )、在 C# 中,編譯器是忽略空白符的(包括空格和制表符),所以寫(xiě)程序的時(shí)候,可以按照自己的習(xí)慣來(lái)格式化代碼,以滿足自己的需求。比如一個(gè)變量與一個(gè)符號(hào)之間可以是一個(gè)空格也可以是多個(gè)空格,也可以沒(méi)有空格,但是建議有一個(gè)空格。
( 2 )、在 C# 中,任何一個(gè)語(yǔ)句都是以分號(hào)結(jié)束的,所以在一行上可以寫(xiě)多條語(yǔ)句,每個(gè)語(yǔ)句以分號(hào)結(jié)束即可。但是一般都是一行寫(xiě)一條語(yǔ)句,不能把一條語(yǔ)句分多行寫(xiě)。
( 3 )、在 C# 中,為了程序更具可讀性,一般都要添加很多的注釋,在注釋的區(qū)域內(nèi),編譯器是不會(huì)去編譯被注釋的內(nèi)容的,有三種注釋方式:
A 、單行注釋:在一行之前使用左斜杠“ // ”
B 、多行注釋:在要注釋的多行前后加上“ /*……*/ ”
C 、對(duì)函數(shù)、屬性等的說(shuō)明注釋“ /// ”,可以對(duì)屬性、函數(shù)、類進(jìn)行說(shuō)明,也可以對(duì)函數(shù)的參數(shù)進(jìn)行說(shuō)明,以后調(diào)用的時(shí)候能看到說(shuō)明了
( 4 )、可以隱藏代碼: #region……#endregion
( 5 )、 C# 語(yǔ)言是塊結(jié)構(gòu)語(yǔ)言,可以將幾個(gè)語(yǔ)句包含到“ {} ”中,構(gòu)成一個(gè)塊,注意:在塊中定義的變量,作用域只在塊中。
2.2、C#數(shù)據(jù)類型的概述
2.3、值類型(簡(jiǎn)單類型)
( 1 )、 byte 類型
byte 類型是一個(gè)無(wú)符號(hào)整數(shù)類型,它占 1 個(gè)字節(jié)。
( 2 )、 int 類型
int 類型是有符號(hào)整數(shù)類型,占用 4 個(gè)字節(jié)。
( 3 )、 long 類型
long 類型是有符號(hào)整數(shù)類型,占用 8 個(gè)字節(jié)。
( 4 )、 bool 類型
bool 類型是個(gè)邏輯類型,它的值是邏輯值,只有兩個(gè),一個(gè)是 true ,一個(gè)是 false 。對(duì)它進(jìn)行賦值、比較都必須用 true 、 false ,輸出也是 true 、 false 。不能賦值為數(shù)字。
( 5 )、 double
雙精度,占 64 個(gè)字節(jié)。在程序中任意寫(xiě)的一個(gè)浮點(diǎn)數(shù)字是雙精度。
( 6 )、 float
單精度,占 32 個(gè)字節(jié)。因?yàn)樵诔绦蛑腥我鈱?xiě)的一個(gè)浮點(diǎn)數(shù)字是雙精度,而在 C# 中,低精度的數(shù)值轉(zhuǎn)換成為高精度的數(shù)值可以隱式的轉(zhuǎn)換,但是高精度的轉(zhuǎn)換成為低精度只能顯示
的轉(zhuǎn)換。所以要把一個(gè)浮點(diǎn)數(shù)字直接賦值給單精度變量,會(huì)出錯(cuò),必須顯式轉(zhuǎn)換,或者在浮點(diǎn)數(shù)字后面加上 f 。
( 7 )、 char
字符是用單引號(hào)括起來(lái)的,字符串是用雙引號(hào)括起來(lái)的字符序列集合。字符是以數(shù)值的形式存放在內(nèi)存中的,這個(gè)數(shù)值就是這個(gè)字符的編碼。編碼有很多種的方式,但是主流的就是以下幾種:
A 、 ASCII :如果系統(tǒng)采用這種編碼方式,這種編碼的字符中,數(shù)字、字母占用一個(gè)字節(jié),漢字占用兩個(gè)字節(jié)。
B 、 Unicode :如果系統(tǒng)采用這種編碼方式,這種編碼的所有字符統(tǒng)一占用兩個(gè)字節(jié)。
C 、 GB2312 :如果系統(tǒng)采用這種編碼方式,這種編碼的字符中,數(shù)字、字母占用一個(gè)字節(jié),漢字占用兩個(gè)字節(jié)。這個(gè)是系統(tǒng)的默認(rèn)編碼。
在 C# 中, char 類型占用兩個(gè)字節(jié),所以不論字符采用何種編碼方式,它都可以接受任
意一個(gè)字符,比如漢字。但是在 C#.NET 中,默認(rèn)采用的編碼方式是 ASCII 。 C#.NET 中的類型是非常嚴(yán)格的,雖然 char 類型的數(shù)據(jù)最終是以整數(shù)編碼的形式存放在內(nèi)存中,但是不能把整數(shù)直接賦值給 char 類型的數(shù)據(jù), char 可以直接賦值給 int 整數(shù)。
常見(jiàn)的轉(zhuǎn)義字符:
|
\ ’ |
單引號(hào) |
|
\ ’’ |
雙引號(hào) |
|
\\ |
右斜杠 |
|
\0 |
空字符,連空格都不是 |
|
\a |
響鈴 |
|
\n |
換行 |
|
\r |
回車(chē) |
|
\t |
Tab 制表符 |
注意:
( 1 )、在 windows 下回車(chē)換行符連用: \r\n ,否則無(wú)效,即在一行與另一行之間隱含了 \r\n 兩個(gè)字符。
( 2 )、在 C# 中,右斜杠 \ 只要出現(xiàn)在字符串中了,那么系統(tǒng)就認(rèn)為它跟后面的字符一起構(gòu)成
轉(zhuǎn)義字符,如果這種轉(zhuǎn)義字符是存在的,那么就編譯通過(guò),如果轉(zhuǎn)義字符不存在,那么編
譯就無(wú)法通過(guò),會(huì)報(bào)錯(cuò),認(rèn)為轉(zhuǎn)義字符非法。但是如果在字符串前面加上了 @ 符號(hào),那么
字符串就被認(rèn)為是逐字符字符串,里面的右斜杠 \ 就會(huì)被認(rèn)為是普通的字符,而不會(huì)被認(rèn)為
是轉(zhuǎn)義字符前面的右斜杠了。
( 3 )、單引號(hào)要特別注意,其實(shí)在 C# 中不轉(zhuǎn)義,也可以直接使用。
2.4、值類型(枚舉類型)
有些變量,不論它的值怎么變化,也只可能是幾個(gè)固定的值,那么這種變量就可以定義成枚舉類型:
Enum typeName
{
Value1 ,
Value2 = 5 ,
Value3 ,
Value4 ,
……
}
枚舉值是有值的,默認(rèn)情況下第一個(gè)值是 0 ,后面依次加 1 遞增,也可以對(duì)枚舉值進(jìn)行賦值,那么以賦值為主,后面的依次加 1 。
( 1 )、定義一個(gè)枚舉類型的變量:
typeName a ;
( 2 )、給它賦值:
a = typeName.value1;
賦值完成之后,輸出的也是枚舉值而非數(shù)值。
( 3 )、可以將枚舉值轉(zhuǎn)換成為整數(shù) :
Int b = (int)a; 或者
int b = Convert.ToInt32(a);
( 4 )、枚舉類型是一個(gè)類型,類也是一個(gè)類型,很顯然是一個(gè)級(jí)別的,所以枚舉類型可以定義在類的外面,命名空間下面,這樣才比較合理。當(dāng)然在類的內(nèi)部去定義枚舉類型也可以,但是不推薦這么做。在本項(xiàng)目中定義的類型可以直接引用,但是在別的項(xiàng)目中定義的類型,首先要添加引用,然后再 using (如果 using 省略的話,那么就需要命名空間名 . 類名),然后如果是定義在類外的,那么必須是 public 才可以引用到,如果是在類的內(nèi)部的,那么不僅要枚舉類型是 public 的,還要類是 public 的,引用的時(shí)候是類名 . 枚舉類型名。
2.5、值類型(結(jié)構(gòu)類型)
在 C#.NET 中,結(jié)構(gòu)體基本不使用,因?yàn)槊嫦驅(qū)ο蟮脑O(shè)計(jì)思想中,類可以取代結(jié)構(gòu)體,更加方便。在此主要說(shuō)明一下類與結(jié)構(gòu)體的區(qū)別:
( 1 )、結(jié)構(gòu)體是值類型,而類是引用類型的。
( 2 )、當(dāng)結(jié)構(gòu)體和類作為函數(shù)參數(shù)的時(shí)候,參數(shù)傳遞時(shí),結(jié)構(gòu)傳的是值,類傳的是引用。
( 3 )、結(jié)構(gòu)的實(shí)例化可以不使用 new 。
( 4 )、結(jié)構(gòu)也可以聲明構(gòu)造函數(shù),但是必須帶參數(shù)。
( 5 )、結(jié)構(gòu)不能繼承。
( 6 )、結(jié)構(gòu)中的字段是不能被初始化的。
2.6、值類型變量的作用域和生存期
非靜態(tài)變量,只考慮類的內(nèi)部的情況:
( 1 )、值類型的變量如果是定義在類的內(nèi)部作為屬性變量,那么就具有該類全局作用域,即類內(nèi)部的函數(shù)都可以調(diào)用這個(gè)變量,哪怕變量定義在函數(shù)的下面。但是一般變量都定義在所有的函數(shù)之前;一個(gè)對(duì)象具有一套變量。
類的對(duì)象創(chuàng)建開(kāi)始,該對(duì)象這一套變量在該對(duì)象中就分配了存儲(chǔ)空間,直到該對(duì)象釋放,那么該對(duì)象這一套變量也就釋放了。
( 2 )、在函數(shù)中,變量的作用域是從定義的位置開(kāi)始,一直到函數(shù)結(jié)束為止。在函數(shù)中,變量定義的前面是不可以引用該變量的。
在函數(shù)中,函數(shù)被調(diào)用的時(shí)候,定義變量的時(shí)候,變量就被分配了存儲(chǔ)空間,函數(shù)結(jié)束了,變量就會(huì)自動(dòng)的被釋放了。
( 3 )、在函數(shù)中的某個(gè)塊 {} 中定義的變量,作用域是從這個(gè)塊中定義開(kāi)始,一直到塊結(jié)束為止。
函數(shù)被調(diào)用的時(shí)候,定義的時(shí)候分配存儲(chǔ)空間,塊結(jié)束的時(shí)候就釋放了。
但是要特別注意:即使是在塊中定義的變量,即使他的作用域只在塊中,而不在塊外,也不能在塊中聲明一個(gè)與塊外同名的變量(這個(gè)塊外同名變量是指該函數(shù)中的,具有從聲明開(kāi)始一直到函數(shù)結(jié)束為止的作用域的變量,這個(gè)變量可以是在塊前也可以是在塊后的,這個(gè)變量不在該函數(shù)的另外一個(gè)塊中)。但是在一個(gè)函數(shù)的不同的兩個(gè)塊中卻可以聲明同名的變量。
( 4 )、如果在類中定義的變量與在函數(shù)中定義的變量同名的話,那么函數(shù)中的變量會(huì)覆蓋掉類中的,在該函數(shù)中,以該函數(shù)中定義的變量為主。但是類中的這個(gè)變量在其他函數(shù)中還是可以引用的。
第二章、C#的數(shù)據(jù)類型(2.1節(jié)~2.6節(jié):值類型以及值類型變量的作用域與生存期)
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

