C# 基础语法
目錄
- C# 基礎語法
- C# 注釋符
- C# 變量(Variable)
- 變量的存儲
- 變量的基本數據類型
- 變量的使用規則
- 變量的命名
- 變量的作用域
- C# 運算符
- 賦值運算符
- 復合賦值運算符
- `+`號的作用
- 算術運算符
- 關系(比較)運算符
- 邏輯運算符
- 三元運算符
- C# 占位符
- C# 轉義符
- `@`符號
- C# 類型轉換
- 隱式類型轉換(自動類型轉換)
- 顯式類型轉換(強制類型轉換)
- Convert類型轉換
- TryParse類型轉換
- ToString類型轉換
- C# 結構劃分
- C# 分支結構
- if 語句
- if-else 語句
- if-else-if 語句
- switch-case 語句
- C# 循環結構
- while 循環
- do-while循環
- for 循環
- C# 關鍵字
- break關鍵字
- continue關鍵字
- C# 復雜數據類型
- C# 常量(Constant)
- 常量的聲明
- 什么時候使用常量?
- C# 枚舉(Enum)
- 枚舉的聲明和使用
- 枚舉與基本數據類型之間的轉化
- C# 結構
- C# 數組
- 數組的排序
- C# 方法(函數)
- 方法調用
- 關鍵字return
- 方法調用
- out參數
- ref參數
- params可變參數
- 方法的重載
- 方法的遞歸
- C# 異常
- 異常捕獲
- 產生隨機數
gitee代碼傳送門配合代碼食用更佳
C# 基礎語法
🌳C# 語言是在 C、C++ 的基礎上發展而來的,因此在語法形式上有些類似。
🌳掌握 C# 的基本語法是學好 C# 語言的前提。
🌳C#語言是一種強類型語言,要求每個變量都必須指定數據類型。
🌳任何一個程序都離不開選擇語句和循環語句,例如登錄一個網站需要輸入用戶名和密碼,如果輸入正確,可以進入該網站,否則無法登錄,這里使用的就是選擇語句。
🌳此外,如果輸入用戶名和密碼的次數超過 3 次就不允許登錄,則可以使用循環語句進行判斷或者使用跳轉語句完成。
C# 注釋符
①注釋符的作用
②C#具有3種注釋符
C# 變量(Variable)
變量的存儲
變量用來在計算機當中存儲數據
存儲變量的語法
變量類型 變量名;//聲明或者定義某個類型的變量 變量名 = 值;//給這個變量進行賦值 //聲明并且給變量賦值的簡寫形式 變量類型 變量名 = 值;注:=在這里并不是表示等于而是表示賦值
變量的基本數據類型
變量的使用規則
如果你要是用變量的話,應該先聲明再賦值最后使用。
變量的命名
首先要保證的就是這個變量的名字要有意義。
注意
在滿足上面一系列的規則之外同時還要滿足這一系列的規范。
給變量起名字的時候要滿足兩個命名規范
變量的作用域
🌳變量的作用域就是你能夠使用到這個變量的范圍。
🌳變量的作用域一般從聲明它的那個括號開始到那個括號所對應的結束的括號結束。
🌳在這個范圍內,我們可以訪問并使用變量。超出這個范圍就訪問不到了。
C# 運算符
由XX運算符連接的表達式稱為XX表達式
如:由算術運算符連接的表達式稱為算術表達式。
賦值運算符
賦值運算符中最常見的是等號,除了等號以外還有很多賦值運算符,它們通常都是與其他運算符連用起到簡化操作的作用。
| = | x = y,等號右邊的值賦值給等號左邊的變量,即把變量 y 的值賦給變量 x |
注意:每個表達式我們都可以求解出一個定義,對于賦值表達式而言,等號左邊的變量的值,就是整個賦值表達式的值。
復合賦值運算符
| += | x+=y,等同于 x=x+y |
| -= | x-=y,等同于 x=x-y |
| *= | x*=y,等同于 x=x*y |
| /= | x/=y,等同于 x=x/y |
| %= | x%=y,等同于 x=x%y |
+號的作用
算術運算符
| + | 對兩個操作數做加法運算 |
| - | 對兩個操作數做減法運算 |
| * | 對兩個操作數做乘法運算 |
| / | 對兩個操作數做除法運算 |
| % | 對兩個操作數做取余運算 |
| ++ | x ++ 或 ++ x,等同于x = x + 1 |
| -- | x -- 或 -- x,等同于x = x - 1 |
需要注意的是,++ 和 -- 運算符放在操作數前和操作數后是有區別的,如果放在操作數前,需要先將操作數加 1 或減 1,然后再與其他操作數進行運算;如果放在操作數后,需要先與其他操作數進行運算,然后操作數自身再加 1。
前加加減減示例a = 2,b = ++a + 3?\longrightarrow? a += 1, b = 3 + 3
后加加減減示例a = 2,b = a++ + 3?\longrightarrow? b = 2 + 3, a += 1
對于像++、--這樣只需要一個操作數就能夠完成運算的符號,我們稱為一元運算符。
對于+、-、*、/、%這樣需要兩個或以上才能完成運算的操作符,我們稱為二元運算符。
一元運算符的優先級要高于二元運算符。
如果在一個表達式當中,既有一元運算符,又有二元運算符,我們首先計算一元運算符。
關系(比較)運算符
關系運算符是用來描述兩個事物之間的關系
關系表達式的結果是bool類型
| == | 表示兩邊表達式運算的結果相等,注意是兩個等號 |
| != | 表示兩邊表達式運算的結果不相等 |
| > | 表示左邊表達式的值大于右邊表達式的值 |
| < | 表示左邊表達式的值小于右邊表達式的值 |
| >= | 表示左邊表達式的值大于等于右邊表達式的值 |
| <= | 表示左邊表達式的值小于等于右邊表達式的值 |
邏輯運算符
在使用邏輯運算符時需要注意邏輯運算符兩邊的表達式以及返回的結果都是布爾類型的
| && | 邏輯與 | 如果運算符兩邊都為 True,則整個表達式為 True,否則為 False;如果左邊操作數為 False,則不對右邊表達式進行計算,相當于“且”的含義 |
| || | 邏輯或 | 如果運算符兩邊有一個或兩個為 True,整個表達式為 True,否則為 False;如果左邊為 True,則不對右邊表達式進行計算,相當于“或”的含義 |
| ! | 邏輯非 | 表示和原來的邏輯相反的邏輯 |
注:邏輯與的優先級要高于邏輯或
三元運算符
if-else的簡化寫法
語法
如果表達式1可以計算出true,那么表達式2的值就是整個三元表達式的值
如果表達式1可以計算出false,那么表達式3的值就是整個三元表達式的值
注意:表達式2的結果類型必須跟表達式3的結果類型一致,并且也要跟整個三元表達式的結果類型一致。
C# 占位符
使用方法:先挖個坑,再填個坑;挖坑就是“,”后變量的個數,填坑就是占位符的使用。從0開始依次遞增。
使用占位符需要注意的地方
C# 轉義符
轉義符指的就是一個’ \ '+ 一個特殊的字符,組成了一個具有特殊意義的字符
| \' | 單引號 |
| \" | 雙引號 |
| \\ | 反斜杠 |
| \0 | 空 |
| \a | 警告(產生鳴笛音) |
| \b | 退格(放在字符串兩邊沒有效果) |
| \f | 換頁 |
| \n | 換行 |
| \r | 回車 |
| \t | 水平制表符 |
| \v | 垂直制表符 |
@符號
C# 類型轉換
隱式類型轉換(自動類型轉換)
我們要求等號兩邊參與運算的操作數的類型必須一致,如果不一致,滿足下列條件會發生自動類型轉化,或者稱之為隱式類型轉換。
滿足下面兩個條件才能發生隱式類型轉換
顯式類型轉換(強制類型轉換)
滿足下面兩個條件才能發生顯式類型轉換
Convert類型轉換
比如字符串"123"看起來就能夠轉成int類型,而字符串"abc"看起來就不能轉成int類型。
TryParse類型轉換
Convert底層就是使用Parse,所以Parse也會拋異常,而TryParse轉化失敗不會拋異常
int.Parse("123abc"); double.Parse("123abc"); decimal.Parse("123abc");int.TryParse("123abc"); double.TryParse("123abc"); decimal.TryParse("123abc");ToString類型轉換
所有類型都能夠轉換成string類型
//int n = 10; //double n = 3.14; //decimal n = 20000m; QQstate n = QQstate.Busy; string s = n.ToString(); Console.WriteLine(s);C# 結構劃分
🌳無論世界上有多少語言、又將出現多少語言,他們的骨架都是這三個結構“順序結構”、“選擇結構”和“控制結構”。
🌳順序結構:程序從Main函數進入,從上到下一行一行的執行,不會落下任何一行。
🌳選擇結構:if、if-else、if-else-if、switch-case
🌳循環結構:while、do-while、for、foreach
C# 分支結構
if 語句
語法
if(判斷條件) {代碼塊; }判斷條件:一般為關系表達式或者bool類型的值亦或是bool類型的變量。
執行過程:當判斷條件為 True 時執行代碼塊中的內容,否則不執行并跳出if-else結構。
if結構的特點:先判斷再執行,最多執行一條代碼。
作用:用于一種情況的判斷
if-else 語句
語法
if (判斷條件) {代碼塊1; } else {代碼塊2; }判斷條件:一般為關系表達式或者bool類型的值亦或是bool類型的變量。
執行過程:上面語句的執行過程是當 if 中的布爾表達式的結果為 True 時執行代碼塊1,否則執行代碼塊2。代碼塊1或者2執行完之后,就跳出if-else結構。
if-else結構的特點:先判斷再執行,最少執行一條代碼。else永遠只跟離它最近的那個if配對。
作用:用于兩種情況的判斷
if-else-if 語句
語法
if (判斷條件1) {代碼塊1; } else if (判斷條件2){代碼塊2; } ... else {代碼塊n; }判斷條件:一般為關系表達式或者bool類型的值亦或是bool類型的變量。
執行過程:先判斷條件1 的值是否為 True,如果為 True,執行代碼塊 1,整個語句結束,否則依次判斷每個判斷條件的值,如果都不為 True,執行else語句中的語句塊 n。
作用:用于處理多種情況的區間判斷
需要注意的是,在上面的語法中最后一個 else{} 語句是可以省略的。如果省略了 else{} 語句,那么多分支的 if 語句中如果沒有判斷語句的值為 True 的語句,則不會執行任何語句塊。
switch-case 語句
語法
switch(變量或者表達式的值) {case 值1:要執行的代碼;break;case 值2:要執行的代碼;;break;case 值3:要執行的代碼;break;......default:要執行的代碼;break; }執行過程:程序執行到switch處,首先將括號中變量或者表達式的值計算出來,
然后拿著這個值依次跟每個case后面所帶的值進行匹配,一旦匹配成功,則執行該case所帶的代碼,執行完成后,遇到break,跳出switch-case結構。
如果跟每個case所帶的值都不匹配,就看當前這個switch-case結構中是否存在default,如果有default,則執行default中的語句,如果沒有default,則該switch-case結構什么都不做。
作用:用來處理多條件的定值判斷。只不過switch-case能夠處理的,if-else也能夠處理
C# 循環結構
while 循環
語法
while (循環條件) {循環體; }執行過程: 程序運行到while處, 首先判斷while所帶的小括號內的循環條件是否成立,
如果成立的話, 也就是返回一個true, 則執行循環體, 執行完一遍循環體后, 再次回到
循環條件進行判斷, 如果依然成立, 則繼續執行循環體, 如果不成立, 則跳出while循環。
在while循環當中, 一般總會有那么一行代碼, 能夠改變循環條件, 使之終有一天不再成立,
如果沒有那么一行代碼能夠改變循環條件, 也就是循環條件永遠都成立, 我們稱之這種循環叫做死循環。
最簡單的最常用的死循環
特點:先判斷,再執行,有可能一遍循環都不執行
do-while循環
語法
do {循環體; }while(循環條件)執行過程: 程序首先會執行do中的循環體, 執行完成后, 去判斷do-while循環的循環條件, 如果成立, 則繼續執行do中的循環體, 如果不成立, 則跳出do-while循環。
特點: 先循環, 再判斷, 最少執行一遍循環體。
for 循環
語法
for(表達式 1; 表達式 2; 表達式3) {循環體; }表達式1一般為聲明循環變量,記錄循環的次數 (int i=0;)
表達式2一般為循環條件 (i<10)
表達式3一般為改變循環條件的代碼,使循環條件終有一天不再成立 (i++)。
執行過程:程序首先執行表達式1,聲明了一個循環變量用來記錄循環的次數,
然后執行表達式2 , 判斷循環條件是否成立,如果表達式 2 返回的結果為true,
則執行循環體:當執行完循環體后,執行表達式3,然后執行表達式 2 繼續判斷循環條件是否成立,
如果成立則繼續執行循環體,如果不成立,則跳出for循環。
C# 關鍵字
break關鍵字
break一般不單獨的使用,而是跟著if判斷一起使用,表示當滿足某些條件的時候,就不再循環了。
continue關鍵字
continue 會跳過當前循環中的代碼,強制開始下一次循環。
C# 復雜數據類型
C# 常量(Constant)
與變量不同的是,常量在第一次被賦值后值就不能再改變。定義常量需要使用關鍵字 const 來完成。
常量的聲明
語法
const 變量語法 變量名 = 值;需要注意的是,在定義常量時必須為其賦值,因為不賦值的話以后就再也不能賦值了。另外,也可以同時定義多個常量。
什么時候使用常量?
在程序中使用常量也會帶來很多好處,包括增強了程序的可讀性以及便于程序的修改。例如在一個計算率的程序中,為了保證程序中的稅率統一,設置一個名為 TAX 的常量來完成,如果需要修改稅率只修改該常量的值即可。
C# 枚舉(Enum)
枚舉就是一種變量類型。只是枚舉聲明、賦值、使用的方式跟那些普通的變量類型不一樣。
枚舉的作用:枚舉可以規范開發
舉個例子說明為什么會有枚舉這個東西?
比如說你現在和三個人共同做個某某大學管理系統。這是你們四個人都這些事情,并且都分配了不同的模塊,比如存儲性別,每個人的定義方法都不相同,你們這個時候我們可以共同定義性別的規范,這是就可以使用枚舉規范我們的開發。
語法
//聲明以及使用 [public] enum 枚舉名 {值1,值2,值3,...... }public:訪問修飾符。公開的公共的,哪都可以訪問。
enum:關鍵字,聲明枚舉的關鍵字
枚舉名:要符合Pascal命名規范
枚舉的聲明和使用
將枚舉聲明到命名空間的下面,類的外面,表示這個命名空間下,所有的類都可以使用這個枚舉。
public enum Season {春,夏,秋,冬 }Season s = Season.春;枚舉與基本數據類型之間的轉化
枚舉類型和int類型相互轉換
枚舉類型默認是跟int類型相互兼容的,所以可以通過強制類型轉換的語法互相轉換。
當轉換一個枚舉中沒有的值的時候,不會拋異常,而是直接將數字顯示出來。
枚舉類型和string類型相互轉換
枚舉同樣也可以跟string類型互相轉換,如果將枚舉類型轉換成string類型, 則直接調用ToString();
如果將字符串轉換成枚舉類型則需要下面這樣一行代碼:
如果轉換的字符串是數字,則就算枚舉中沒有,也不會拋異常。
如果轉換的字符串是文本,如果枚舉中沒有,則會拋異常。
C# 結構
結構作用:可以幫助我們一次性聲明多個不同類型的變量。
[public] struct 結構名 {成員; //字段 }變量在程序運行期間只能存儲一個值,而字段可以存儲多個值。
C# 數組
數組作用:可以幫助我們一次性存儲多個相同類型的變量。
通過下標或者索引去訪問和賦值數組中的元素。
語法
數組的長度一旦固定了,就不能夠再改變了。
數組的排序
通過下方兩個操作可以實現數組的升序和降序。
Array.Sort(數組); //升序 Array.Reverse(數組); //反轉數組C# 方法(函數)
方法就是將一堆代碼進行重用的一種機制
語法
public:訪問修飾符,公開的, 公共的,哪都可以訪問
static:靜態的
返回值類型:如果不需要寫返回值,寫void
方法名:Pascal 每一個單詞的首字母都大寫,其余字母小寫
參數列表:完成這個方法所必須要提供給這個方法的條件。如果沒有參數,小括號也不能省略。
方法調用
方法寫好后,如果想要被執行,必須要在Main()函數中調用。
方法的調用語法
在某些情況下,類名是可以省略的,如果你寫的方法跟Main()函數同在一個類中,這個時候,類名可以省略。
關鍵字return
方法調用
我們在Main()函數中,調用Test()函數,我們管Main()函數稱之為調用者,管Test()函數稱之為被調用者。
如果被調用者想要調用者的值:
1.傳遞參數
2.使用靜態字段來模擬全局變量
(CSharp沒有全局變量,但是可以用靜態字段模擬全局變量,靜態變量的作用域是聲明的類當中)
如果調用者想要被調用者的值:
1.return 返回值;
方法需要注意的地方
1.不管是實參還是形參,都是在內存中開辟空間。
2.方法的功能一定要單一。錯誤示范:GetMax(int n1, int n2) //判斷閏年
3.方法中最忌諱的就是出現提示用戶輸入的字眼,所以你需要盡可能地不使用Console.WriteLine()方法來達到目的。
out參數
如果你在一個方法中,返回多個相同類型的值的時候,可以考慮返回一個數組。
但是,如果返回多個不同類型的值的時候,返回數組就不行了,那么這個時候,我們可以考慮使用out參數。
out參數就側重于在一個方法中返回多個不同類型的值。
out參數要求在方法的內部必須為其賦值。
out意思就是返回多余的值。
ref參數
能夠將一個變量帶入一個方法中進行改變,改變完成后,再講改變后的值帶出方法。
ref參數要求在方法外必須為其賦值,而方法內可以不賦值。
params可變參數
將實參列表中跟可變參數數組類型一致的元素都當作數組的元素去處理。
params 參數必須是形參表中最后一個參數。一個形參列表中只能有一個params參數。
方法的重載
方法的重載指的就是方法的名稱相同,但是參數不同。
參數不同,分為兩種情況
1.如果參數的個數相同,那么參數的類型就不能相同。
2.如果參數的類型相同,那么參數的個數就不能相同。
注:方法的重載跟返回值沒有關系
方法的遞歸
方法自己調用自己
C# 異常
異常是指 語法上沒有任何錯誤,在程序運行的過程當中,由于某些原因出現了問題,使程序不能再正常的運行。
異常捕獲
我們在程序中經常會出現各種各樣的異常,你如果想要你的程序變得堅強一些。
在你的代碼中應該經常性的使用try-catch來進行異常捕獲。
哪行代碼有可能出現異常,你就try它一腳。
語法
執行過程:如果try中的代碼沒有出現異常,那么catch中的代碼不會執行。
如果try中的代碼出現了異常,那怕這行出現異常的代碼后面還有一百行都不會執行了。
而是直接跳到catch中執行代碼。
產生隨機數
Random r = new Random(); int rNumber = r.Next(1, 11); //左閉右開總結
- 上一篇: bzoj4084 [Sdoi2015]
- 下一篇: 图片饱和度更改,c#,winform