C#筆記——基礎篇
一.入門知識
VS中的常用快捷鍵
- Ctrl+K+D:快速對齊代碼
- Ctrl+Z:撤銷
- Ctrl+S:保存(一定要經常保存!)
- Ctrl+J:快速彈出智能提示
- Shift+End 、Shift+Home
- Ctrl+K+C:注釋所選代碼
- Ctrl+K+U:取消對所選代碼的注釋
- F1:轉到幫助文檔
- 折疊冗余代碼:#Region 和#EndRegion
- 新建空的 tab鍵 新增子節點 回車鍵 新增兄弟節點
- F7快捷截圖 F8預覽
- .net/dotnet:一般指.Net Framework框架.一種平台,一種技術.
- C#(sharp):一種編程語言,可以開發基於.net平台的應用.
- (*) Java即是一種平台又是一種編程語言
xmind 繪圖軟件
1、概念:.net與c#
.Net FrameWork框架提供了一個穩定的運行環境,;來保障我們.Net平台正常的運轉
2、.net都能干什么(S)
- 桌面應用程序 Winform(.net開發的桌面應用程序叫Winform應用程序)
- Internet應用程序 ASP.NET
(.net開發的internet應用程序叫ASP.NET應用程序)
- 手機開發 wp8
(.net可以做手機開發,Wp8,目前在中國剛剛起步,也許 這是一個機會)
Wp8已經來襲,要善於抓住機會,敢於嘗試.----掌握分寸
- Unity3D游戲開發或者虛擬現實(大家的機遇)
- C/S:客戶機(Client)/服務器模式(Server) 如:qq
3、.NET兩種交互模式(s)
(C/S是Client/Server的縮寫。客戶端需要安裝專用的客戶端軟件。 Winform)
- B/S:瀏覽器(Browser)/服務器模式(Server)
(B/S是Brower/Server的縮寫,客戶機上只要安裝一個瀏覽器Internet應用程ASP.NET
)
4、IDE
IDE指的就是我們的開發工具。
(.net的IDE就是vs2010、vs2012、vs2013
注:MSDN(我們的百科全書,幫助)神器
5、vs的操作
1
1)、啟動VS
a、雙擊圖標
b、調出cmd,輸入 devenu
2)、解決方案、項目及類之間的關系
解決方案:公司
項目:部門
類:員工
在視圖里面找解決方案資源管理器
3)、Program中的各個組成部分
引用命名空間:
京東----》京東在線商城項目---》顧客類
淘寶----》淘寶在線商城項目---》顧客類
高端霸氣公司----》老趙牛X項目---》顧客類
4)、方法或者函數
Main函數是我們程序的主入口,你寫的代碼如果想要被執行的話,必須寫在Main函數當中。
5)、
.sln:解決方案文件,里面包含着整個解決方案的信息,可以雙擊運行。
.csproj:項目文件,里面包含着這個項目的信息,可以雙擊運行。
2、書寫代碼需要注意的地方:
1)、代碼中出現的所有標點都是英文半角 shift鍵快速切換中文半角和英文半角
shift+空格 切換全角/半角
2)、在c#代碼中,每行代碼的結束,我們都以分號結束,注意:這個分號也是英文半角的分號。
3)、Console.WriteLine("要打印的內容");
Console.ReadKey();
a、暫停當前程序,等待用戶按下任意鍵繼續,按下的任意鍵將顯示在我們的控制台當中
3、運行程序的兩種方式
1)、點擊綠色的啟動按鈕
2)、使用快捷鍵F5
4、生成解決方案
幫助我們排查語法錯誤。
5
1)、如果你的代碼中出現了紅色的波浪線,意味着你的代碼中出現了
語法錯誤。
2)、如果你的代碼中出現了綠色的波浪線,說明你的代碼語法並沒有錯誤,
只不過提示你有可能會出現錯誤,但是不一定會出現錯誤。警告線
二.基礎知識
1、c#中的注釋符
1)、注銷
2)、解釋
3)、三種注釋方式
- 第一種:單行注釋 以//開頭,后面的就是注釋內容
– //單行注釋
- 第二種:多行注釋 以 /*開頭 */結束 之間的是注釋內容
– /* */多行注釋
- 第三種:文檔注釋 在方法或類的上一行輸入 ///就會產生
– ///
– ///文檔注釋
– ///
2、變量
用來在計算機當中存儲數據。如果你要是用變量的話,應該要先聲明再賦值再使用。
存儲整數100
數據類型:整數
在內存中開辟的空間應該是整數類型 int
存儲變量的語法:
變量類型 變量名;
變量名=值;
"="號:在這並不表示等於的意思,而是賦值的意思,表示把等號右邊的值賦值給等號左邊的變量。
聲明並且給變量賦值的簡寫形式:
變量類型 變量名=值;
3、數據類型
1)、整數類型:int 只能存儲整數,不能存儲小數。
2)、小數類型:double 既能存儲整數,也能存儲小數,小數點后面的位數 15~16位。
3)、金錢類型:decimal:用來村粗金錢,值后面需要加上一個m.
4)、字符串類型:string,用來存儲多個文本,也可以存儲空,字符串類型的值需要被 雙引號引來,
這個雙引號必須是英文半角狀態下的雙引號
5)、字符類型:char,用來存儲單個字符,最多、最少只能有一個字符,不能存儲空。
字符類型的值需要用 單引號因起來。英文半角狀態下的單引號。
4、命名規則:
****首先要保證的就是這個變量的名字要有意義。
1 現階段給變量起名字的時候都以字母開頭
2 后面可以跟任意“字母”、數字、下划線.
注意:
1)你起的變量名不要與c#系統中的關鍵字重復.
2)在c#中,大小寫是敏感的. HTML
3)同一個變量名不允許重復定義(先這么認為,不嚴謹)
給變量起名字的時候要滿足兩個命名規范:
1、Camel 駱駝命名規范。要求變量名首單詞的首字母要小寫,其余每個單詞的首字母要大寫。
多用於給變量命名。
2、Pascal 命名規范:要求每個單詞的首字母都要大寫,其余字母小寫。多用於給類或者方法命名。
HighSchoolStudent
highSchoolStudent
5、運算符
1)、算數運算符
+,-,*,/,%
2)、賦值運算符
=:表示賦值的意思,表示把等號右邊的值,賦值給等號左邊的變量。
由等號連接的表達式稱之為賦值表達式。
注意:每個表達式我們都可以求解除一個定值,對於賦值表達式而言,等號左邊的變量的值,
就是整個賦值表達式的值。
int number=10;
6、+號和占位符的作用
+號
1)、連接:當+號兩邊有一邊是字符串的時候,+號就起到連接的作用。
2)、相加:兩邊是數字的時候
占位符
使用方法:先挖個坑,再填個坑。
使用占位符需要注意的地方:
1)、你挖了幾個坑,就應該填幾個坑,如果你多填了,沒效果。
如果你少填了,拋異常。
2)、輸出順序:按照挖坑的順序輸出。
7、異常
異常是指:語法上並沒有任何錯誤,只不過在程序運行的期間,由於某些原因出現了問題,
使程序不能再正常的運行。
8、轉義符
轉義符指的就是一個'\'+一個特殊的字符,組成了一個具有特殊意義的字符。
\n:表示換行
\":表示一個英文半角的雙引號
\t:表示一個tab鍵的空格
\b:表示一個退格鍵,放到字符串的兩邊沒有效果。
\r\n:windows操作系統不認識\n,只認識\r\n
\\:表示一個\
@符號
1、取消\在字符串中的轉義作用,使其單純的表示為一個'\'
2、將字符串按照編輯的原格式輸出
9、類型轉換
1)隱式類型轉換:
我們要求等號兩遍參與運算的操作數的類型必須一致,如果不一致,滿足下列條件會發生
自動類型轉換,或者稱之為隱式類型轉換。
兩種類型兼容
例如:int 和 double 兼容(都是數字類型)
目標類型大於源類型
例如:double > int 小的轉大的
2)顯示類型轉換:
1、兩種類型相兼容 int--double
2、大的轉成小的 double----int
語法:
(待轉換的類型)要轉換的值;
總結:
自動類型轉換:int---->double
顯示類型轉換:double--->int
控制小數點位數的:{0:0.00}:小數點后兩位
3)Convert類型轉換
1、類型如果相兼容的兩個變量,可以使用自動類型轉換或者強制類型轉換,
但是,如果兩個類型的變量不兼容,比如 string與int或者string 與double,
這個時候我們可以使用一個叫做Convert的轉換工廠進行轉換。
注意:使用Convert進行類型轉換,也需要滿足一個條件:
面兒上必須要過的去。
int number = Convert.ToInt32(Console.ReadLine());
4)int.parse Convert的內部方法,比其效率高一點,不過還會拋異常
嘗試着將一個字符串轉換成int類型。
int number= int.Parse(Console.ReadLine());
5) int.TryParse是方法,需要有參數和返回值,如果失敗,不會拋出異常
int num=0;
bool b=int.TryParse(“3”, out num)//如果可以轉換成功,b=true,num=3;否則,b=false;num=0;
10、運算符
1、算數運算符
1.
++:分為前++和后++,不管是前++還是后++,最終的結果都是給這個變量加一。
區別表現表達式當中,如果是前++,則先給這個變量自身加一,然后帶着這個加一后的值去參與運算。
如果是后++,則先拿原值參與運算,運算完成后,再講這個變量自身加一。
--:同上。
2、
對於向加加或者減減這樣只需要一個操作數就能完成的運算,我們稱之為一元運算符。
+ - * / % 對於這些需要兩個或以上才能完成運算的操作符,我們稱之為二元運算符。
一元運算符的優先級要高於而元運算符。
如果在一個表達式當中,既有一元運算符,又有二元運算符,我們首先計算一元運算符。
int number=10;
int result=10 + ++number;
2、關系運算符
>、 <、 >=、 <=、 ==、 !=
關系運算符是用來描述兩個事物之間的關系
由關系運算符連接的表達式稱之為關系表達式。
3、bool類型
在c#中我們用bool類型來描述對或者錯。
bool類型的值只有兩個 一個true 一個false
4、邏輯運算符
&& 邏輯與
||邏輯或
!邏輯非
又邏輯運算符連接的表達式叫做邏輯表達式
邏輯運算符兩邊放的一般都是關系表達式或者bool類型的值。
5>3 &&true
3>5||false
!表達式
邏輯表達式的結果同樣也是bool類型
5、復合賦值運算符
int number=10;
+= :
number+=20;
number=number+20;
-=
number-=5;
number=number-5;
*=
number*=5;
number=number*5;
/=
%=
6.三元表達式
語法:
表達式1?表達式2:表達式3;
表達式1一般為一個關系表達式。
如果表達式1的值為true,那么表達式2的值就是整個三元表達式的值。
如果表達式1的值為false,那么表達式3的值就是整個三元表達式的值。
注意:表達式2的結果類型必須跟表達式3的結果類型一致,並且也要跟整個三元表達式的結果類型一致。
11.結構
1.
順序結構:程序從Main函數進入,從上到下一行一行的執行,不會落下任何一行。
if語句:
語法:
if(判斷條件)
{
要執行的代碼;
}
判斷條件:一般為關系表達式或者bool類型的值。
執行過程:程序運行到if處,首先判斷if所帶的小括號中的判斷條件,
如果條件成立,也就是返回true,則執行if所帶的大括號中的代碼,
如果判斷條件不成立,也就是返回一個false。則跳過if結構,繼續向下執行。
if結構的特點:先判斷,再執行,有可能一行代碼都不執行
用於一種情況的判斷。
2.
分支結構: if-else
語法:
if(判斷條件)
{
執行的代碼;
}
else
{
執行的代碼
}
執行過程:程序執行到if處,首先判斷if所帶的小括號中的判斷條件是否成立,
如果成立,也就是返回一個true,則執行if所帶的大括號中的代碼,
執行完成后,跳出if-else結構。
如果if所帶的小括號中的判斷條件不成立,也就是返回一個false,
則跳過if語句,執行else所帶的大括號中的語句,執行完成后,跳出if-else結構。
if-else特點:先判斷,再執行,最少都要執行一條代碼。
用於兩種情況的判斷
注意:else永遠跟離它最近的那個if配對
3
選擇結構:if else-if switch-case
if else-if
作用:用來處理多條件的區間性的判斷。
語法:
if(判斷條件)
{
要執行的代碼;
}
else if(判斷條件)
{
要執行的代碼;
}
else if(判斷條件)
{
要執行的代碼;
}
else if(判斷條件)
{
要執行的代碼;
}
........
else
{
要執行的代碼;
}
執行過程;程序首先判斷第一個if所帶的小括號中的判斷條件,如果條件成立,也就是返回一個true,
則執行該if所帶的大括號中的代碼,執行完成后,立即跳出if else-if結構。
如果第一個if所帶的判斷條件不成立,也就是返回一個false,則繼續向下進行判斷,依次的判斷每一個if所帶
的判斷條件,如果成立,就執行該if所帶的大括號中的代碼,如果不成立,則繼續向下判斷,
如果每個if所帶的判斷條件都不成立,就看當前這個if else-if結構中是否存在else。
如果有else的話,則執行else中所帶的代碼,如果沒有else,則整個 if-else if神馬都不做。
else可以省略。
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結構
什么都不做。
4
循環結構:while do-while for
while循環:
while(循環條件)
{
循環體;
}
執行過程:程序運行到while處,首先判斷while所帶的小括號內的循環條件是否成立,
如果成立的話,也就是返回一個true,則執行循環體,執行完一遍循環體后,再次回到
循環條件進行判斷,如果依然成立,則繼續執行循環體,如果不成立,則跳出while循環。
在while循環當中,一般總會有那么一行代碼,能夠改變循環條件,使之終有一天不再成立,
如果沒有那么一行代碼能夠改變循環條件,也就是循環條件永遠都成立,我們稱之這種循環
叫做死循環。
最簡單的最常用的死循環:
while(true)
{
}
特點:先判斷,再執行,有可能一遍循環都不執行。
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循環。
12 break, Continue
break
1)、可以跳出switch-case結構。
2)、可以跳出當前循環。
break一般不單獨的使用,而是跟着if判斷一起使用,表示,當滿足某些條件的時候,就不再循環了。
Continue
立即結束本次循環,判斷循環條件,如果成立,則進入下一次循環,否則退出循環.
13、異常捕獲
1.try-catch
.我們在程序中經常會出現各種各樣的異常,你如果想要你的程序變得堅強一些。
在你的代碼中應該經常性的使用try-catch來進行異常捕獲。
哪行代碼有可能出現異常,你就踹它一腳。
語法:
try
{
可能會出現異常的代碼;
....
...
...
}
//try和catch之間不能有其他的代碼
catch
{
出現異常后要執行的代碼;
}
執行過程:如果try中的代碼沒有出現異常,那么catch中的代碼不會執行。
如果try中的代碼出現了異常,那怕這行出現異常的代碼后面還有一百行都不會執行了,
而是直接跳到catch中執行代碼
2、變量的作用域
變量的作用域就是你能夠使用到這個變量的范圍。
變量的作用域一般從聲明它的那個括號開始到那個括號所對應的結束的括號結束。
在這個范圍內,我們可以訪問並使用變量。超出這個范圍就訪問不到了
14、程序調試
1)、寫完一段程序后,想看一下這段程序的執行過程。
2)、當你寫完這段程序后,發現,程序並沒有按照你想象的樣子去執行。
調試方法:
1)、F11逐語句調試(單步調試)
2)、F10逐過程調試
3)、斷點調試
15、常量
聲明的常量的語法:
const 變量類型 變量名=值;
什么時候會用到常量?
16、枚舉
語法:
[public] enum 枚舉名
{
值1,
值2,
值3,
........
}
public:訪問修飾符。公開的公共的,哪都可以訪問。
enum:關鍵字,聲明枚舉的關鍵字
枚舉名:要符合Pascal命名規范
將枚舉聲明到命名空間的下面,類的外面,表示這個命名空間下,所有的類都可以使用這個枚舉。
枚舉就是一個變量類型 ,int--double string decimal.
只是枚舉聲明、賦值、使用的方式跟那些普通的變量類型不一樣。
我們可以將一個枚舉類型的變量跟int類型和string類型互相轉換。
枚舉類型默認是跟int類型相互兼容的,所以可以通過強制類型轉換的語法互相轉換。
當轉換一個枚舉中沒有的值的時候,不會拋異常,而是直接將數字顯示出來。
枚舉同樣也可以跟string類型互相轉換,如果將枚舉類型轉換成string類型,則直接調用ToString().
如果將字符串轉換成枚舉類型則需要下面這樣一行代碼:
(要轉換的枚舉類型)Enum.Parse(typeof(要轉換的枚舉類型),"要轉換的字符串");
如果轉換的字符串是數字,則就算枚舉中沒有,也會不會拋異常。
如果轉換的字符串是文本,如果枚舉中沒有,則會拋出異常。
所有的類型都能夠轉換成string類型,調用ToString()。
17、結構
可以幫助我們一次性聲明多個不同類型的變量。
語法:
[public] struct 結構名
{
成員;//字段
}
變量在程序運行期間只能存儲一個值,而字段可以存儲多個值。
18、數組
一次性存儲多個相同類型的變量。
語法:
數組類型[] 數組名=new 數組類型[數組長度];
***數組的長度一旦固定了,就不能再被改變了
19、冒泡排序
冒泡排序:就是將一個數組中的元素按照從大到小或者從小到大的順序進行排列。
int[] nums={9,8,7,6,5,4,3,2,1,0}; 0 1 2 3 4 5 6 7 8 9
第一趟比較:8 7 6 5 4 3 2 1 0 9 交換了9次 i=0 j=nums.Length-1-i
第二趟比較:7 6 5 4 3 2 1 0 8 9 交換了8次 i=1 j=nums.Length-1-i
第三趟比較:6 5 4 3 2 1 0 7 8 9 交換了7次 i=2 j=nums.Length-1-i
第四趟比較:5 4 3 2 1 0 6 7 8 9 交換了6次 i=3 j=nums.Length-1-i
第五趟比較:4 3 2 1 0 5 6 7 8 9 交換了5次
第六趟比較:3 2 1 0 4 5 6 7 8 9 交換了4次
第七趟比較:2 1 0 3 4 5 6 7 8 9 交換了3次
第八趟比較:1 0 2 3 4 5 6 7 8 9 交換了2次
第九趟比較:0 1 2 3 4 5 6 7 8 9 交換了1次
for(int i=0;i<number.Length-1;i++)
{
for(int j=0;j<nums.Length-1-i;j++)
{
if(nums[j]>nums[j+1])
{
int temp=nums[j];
nums[j]=nums[j+1];
nums[j+1]=temp;
}
}
}
20、方法
函數就是將一堆代碼進行重用的一種機制。
1.函數的語法:
[public] static 返回值類型 方法名([參數列表])
{
方法體;
}
public:訪問修飾符,公開的,公共的,哪都可以訪問。
static:靜態的
返回值類型:如果不需要寫返回值,寫void
方法名:Pascal 每個單詞的首字母都大些。其余字母小寫
參數列表:完成這個方法所必須要提供給這個方法的條件。如果沒有參數,小括號也不能省略。
方法寫好后,如果想要被執行,必須要在Main()函數中調用。
方法的調用語法:
類名.方法名([參數]);
***在某些情況下,類名是可以省略的,如果你寫的方法跟Main()函數同在一個類中,這個時候,
類名可以省略。
2.return
1、在方法中返回要返回的值。
2、立即結束本次方法。
3、我們在Main()函數中,調用Test()函數,我們管Main()函數稱之為調用者,
管Test()函數稱之為被調用者。
如果被調用者想要得到調用者的值:
1)、傳遞參數。
2)、使用靜態字段來模擬全局變量。
如果調用者想要得到被調用者的值:
1)、返回值
4、
不管是實參還是形參,都是在內存中開辟了空間的。
5、方法的功能一定要單一。
GetMax(int n1,int n2)
方法中最忌諱的就是出現提示用戶輸入的字眼。
6、out、ref、params
1)、out參數。
如果你在一個方法中,返回多個相同類型的值的時候,可以考慮返回一個數組。
但是,如果返回多個不同類型的值的時候,返回數組就不行了,那么這個時候,
我們可以考慮使用out參數。
out參數就側重於在一個方法中可以返回多個不同類型的值。
2)、ref參數
能夠將一個變量帶入一個方法中進行改變,改變完成后,再講改變后的值帶出方法。
ref參數要求在方法外必須為其賦值,而方法內可以不賦值。
3)、params可變參數
將實參列表中跟可變參數數組類型一致的元素都當做數組的元素去處理。
params可變參數必須是形參列表中的最后一個元素。
7、方法的重載
概念:方法的重載指的就是方法的名稱相同給,但是參數不同。
參數不同,分為兩種情況
1)、如果參數的個數相同,那么參數的類型就不能相同。
2)、如果參數的類型相同,那么參數的個數就不能相同。
***方法的重載跟返回值沒有關系。
8、方法的遞歸
方法自己調用自己。
找出一個文件夾中所有的文件。