.Net系列學習課程—01C#

人生不再重來發表於2014-11-30
.Net系列學習課程—第一部分:C#基礎

好的學習習慣
錯誤使用習慣,一段文字的刪除、複製貼上、自動完成。插入、覆蓋模式的困惑。
技巧:訊息框文字的複製:Ctrl+Z
函式名字大小寫切換要用Shift,別用cap
;,()等的全形半形問題。
VisualStudio多專案的建立,專案的重新開啟,只要有一個專案有問題預設就無法執行,專案的解除安裝,自動執行當前專案。如果程式碼執行有問題,看看執行的專案對不對。
VisualStudio各個檢視的開啟、開發環境的重置。
遇到異常、報錯不要慌。

一些常用的操作
儲存位置,以及如何開啟專案的資料夾。(專案上點選右鍵,選擇在資源管理器中開啟.)
如何將專案資料夾中的其它檔案載入到專案中。
專案資料夾中副檔名為csproj的檔案,包含當前專案中包含的檔案。
如何顯示行號:工具|選項|文字編輯器|CS|顯示行號。
Ctrl+G,快速定位到指定行號。


.Net開發環境(*瞭解)



第一個C#程式

  • 建立第一個控制檯程式並且除錯執行。
  • 為什麼要從控制檯程式開始?不要把精力放到表現層,而是把精力放到寫程式碼上。無論控制檯還是Winform還是ASP.Net最難的是寫程式碼,而不是拖控制元件。
  • 唯一需要學的三條控制檯指令:Console.WriteLine:列印輸出、Console.ReadLine:從控制檯讀入一行、Console.ReadKey:控制檯暫停。至於Console.是什麼意思不用管。1+1=2的例子
  • 佔位符是個什麼玩意兒?{0}的個數必須和引數的個數一樣,是一一對應的關係。序號從0開始在後面學習String.Format的時候還會用到這個類。

斷點的技巧:設定、取消、禁用全部斷點、暫停斷點、設定條件等。

VS開發環境介紹

解決方案管理器:解決方案、工程、檔案
拖動檢視、關閉/開啟檢視、重置視窗布局
C#原始檔一般以cs結尾。即使沒有VS也能用記事本開啟
C#程式的入口是Main函式,在Main中寫程式碼就行,暫時不用關心其他部分是什麼意思
錯誤列表。見到編譯錯誤不用慌。錯誤排除演示。常見錯誤:結尾沒有分號,大小寫錯誤。
顯示程式碼行號。工具→選項→文字編輯器→C#→顯示→行號
修改文字編輯器字型。

設定啟動專案,將當前專案自動設定為啟動專案,如果執行結果很奇怪,看看是不是沒有設定啟動專案。

一個解決方案包含多個專案,同時只能開啟一個解決方案;在解決方案上點選右鍵→屬性→啟動專案,“當前選定內容”是把當前編輯器所在的專案為啟動專案,但啟動專案就是右鍵設定啟動專案設定的,多啟動專案可以讓多個專案同時啟動,適合於開發客戶端、伺服器的程式



C#語法

從上到下一條條的依次執行。過去的就讓他過去吧,不會返回頭執行:int i1=3;int i2=5;int i3=i1+i2;i1=9;。
大小寫敏感。String和string 都行是另外一個問題。
函式引數用()包圍。錯誤:string s2 = Console.ReadLine; Console.WriteLine=3,區分方法和屬性,看圖示顏色。
兩句程式碼之間用分號(;)分割(易錯:全形問題)
註釋:單行註釋、多行註釋。批量註釋、反註釋。用VisualStudio的批量反註釋:快捷鍵、工具欄圖示兩種方式。



變數

把變數看成放資料的容器。
定義變數的方式:型別 變數名;  int i3;變數只是容器,必須放進去值才有意義,否則就是一個“杯具”。
string s1=null和string s1不一樣。
變數的型別:不同型別的容器放不同的東西。不能在int型別的變數中放字串。
變數不能放和變數型別不相容的資料。


變數的名字不能重名(不嚴格)
 //int i3 = 33;//定義一個變數i3,賦值為33
i3 = 33;//為已有變數i3賦值為33


變數只能宣告一次,但是可以多次使用。
int i1=5;int i1=6;不可以。但是int i1=5;i1=6;是 可以的。
問題
int i=10;Console.WriteLine("i"); Console.WriteLine(i);


常用基本資料型別

string、int 、char 、bool  long等。bool的取值:true、false。int的表示範圍。long有多long
為什麼輸出"要用轉義符"\"",因為編譯器預設是遇到"開始字串,再遇到"是結束字串,但是如果遇到前面有\的"就不把它當成有字串起始意義的"。\表示不要把\後的"當成字串的開始或者結尾
為什麼要有轉義符,就是要在程式中輸出回車等特殊的字元,不能直接在字串中打回車,所以必須轉移。"\n"回車。string:"\"ab\""、"ab\nb"、"c:\\a.txt"、@"c:\a.txt"(推薦)。@表示字串中的\不當成轉義符。@還可以定義多行文字。"\\\\"一命償一命
"\""中\是告訴編譯器不要把這個"當成字串的結束。
@是不把\當成轉義符。@不是萬能的,不能解決字串中有雙引號的問題,如果有雙引號還是用轉義符
‘a’是char,“a”是string。
string s = Console.ReadLine();
難點:問題:
String str=Console.ReadLine();
Console.WriteLine(str);
使用者輸入a\nb,輸出什麼?轉義符只針對在程式碼中直接寫出的字串,對於程式中讀取出來沒有這個問題。\n是給編譯器看的。把“河蟹”翻譯成“和諧”
簡單的型別轉換:Convert.ToString()、ToString()、Convert.ToInt32() 。即可用中間變數,也可以不用。int i = Convert.ToInt32(Console.ReadLine());


變數的命名

命名規則:第一個字元必須是字母或者下劃線(_),其後的字元可以是任意個數字、字母、下劃線。不能全部使用C#的關鍵字,比如class、namespace、new、void等。判斷方式:VS中亮藍色的就是關鍵字。
這也是類、函式等的命名規則。還可以使用中文變數名(類名、函式名),不推薦。
潛規則:C#中建議變數的開頭用小寫。專業的程式設計師一定要注意大小寫的問題!和“命名規則”不一樣不是強制性的規定
變數在宣告後才能使用
變數的宣告:int i;int x,y;int i=3;變數使用之前必須賦值。


運算子、表示式

+、-、*(乘)、/(除)、%(求餘)
+可以用作字串連線,其他不可以。
++(自增)、--(自減)
(*)運算子優先順序:i1+i2*i3、(i1+i2)*i3。不要變態,括號是王道。
變數可以和字面量混合運算。
練習:讓使用者輸入兩個數,列印出兩個數的和。


賦值

賦值運算子=,讓左邊變數的值等於右邊的計算結果。這就能解釋令人不解的i=i+1;
(*)+=、-=、*=、/=。
i2=i1++;i2=++i1;(瞭解)。--同理。
習題:int a=10;a++;a=a+a;Console.WriteLine("{0}",a);執行結果是什麼?
int i=10;int j=i;i=5;j=?
int x=10;x+y=80;Console.WriteLine(y); x + y = 80; //左邊的必須是變數!!!不能是常量,不能是表示式
習題(重點,難點):交換兩個變數的值。易錯!!!


布林運算

相等判斷:==,不要和=混淆。WriteLine("{0}",i==1);WriteLine("{0}",i=1);的區別。Console.WriteLine("{0}",i=1);//C#中賦值表示式也有值,它的值表示為賦值後變數的值

不等判斷:!=

大小比較:<、>、<=、>=

取反:!

組合運算:&&(並且)、||(或者)。

&& 並且:只有兩邊都為true的時候,表示式的值才為true,否則是false;

||或者:兩邊只要有一個為true的時候,表示式的值就是true,否則是false;

&&、||是短路運算,試驗。


if

單句的時候大括號可以省略,但是不建議省略,演示說明why。if()else if()和if()if()是不一樣的。

if(i>1)
{
}


if(i>1)
{
}
else
{
}

if(i>100||i<10)
{
}

if(i>100&&j>10)

{
}


if(i>100)
{
}
else if(i<10)
{
}
else
{
}


if語句的巢狀

if((i>0&&j>0)||(i<0&&j<0))

{

}


易錯程式碼:

if(i>10);

{

    Console.WriteLine("是");

}


課上練習

學程式設計不是看書,不是聽老師講,而是自己動手寫。
作業1:提示使用者輸入密碼,如果密碼是“888888”則提示正確,否則提示錯誤。
作業2:提示使用者輸入密碼,如果密碼是“888888”則提示正確,否則要求再輸入一次,如果密碼是“888888”則提示正確,否則提示錯誤。
作業3:提示使用者輸入使用者名稱,然後再提示輸入密碼,如果使用者名稱是“admin”並且密碼是“888888”,則提示正確,否則提示錯誤,如果使用者名稱不是admin還提示使用者使用者名稱不存在。
注意:變數命名要用有意義的變數名,不要x、y、z。


switch case

被判定的值進入滿足條件的分支執行

switch(i)
case 1:
//
break;
case 2:
//
break;


switch(i)
case 1:
//
break;
case 2:
//
break;
default:
break;


switch(i)
case 1:
case 2:
//
break;


case中的值必須是常量,不能是變數、表示式。

switch(i)

case a:

//

break;


類似於if...else...else if...else,但是是離散值的判斷。

switch一般都可以用if重寫,但是if不一定能用switch重寫

不要忘了break。C#中的break不寫是不行的,除了合併case的情況


while迴圈

while(i<100)
{
  //列印i
  i++;
}
只要while後小括號中的表示式為true,就不斷執行大括號中的程式碼
while(不是終點)
{
    跑
}


do
{
  //列印i
  i++;
}
while(i<100)
先做……如果滿足則再來一次,直至while表示式為false。至少被執行一次。(*)
易錯while(i<0);
{...}


練習1:用while計算1到100之間整數的和;(有更好的數學解法)

練習2:要求使用者輸入使用者名稱和密碼,只要不是admin、888888就一直提示要求重新輸入。

練習3:不斷要求使用者輸入一個數字,然後列印這個數字的二倍,當使用者輸入q的時候程式退出(return)。

練習4:不斷要求使用者輸入一個數字(假定使用者輸入的都是正整數),當使用者輸入end的時候顯示剛才輸入的數字中的最大值。設一個變數int max,初始值為0,使用者每輸入一次就把使用者輸入的和max比較一下,如果輸入的比max大,則讓max等於使用者輸入。陷阱:判斷end是在之前還是之後。


迴圈的中斷

break:立即終止整個迴圈。
continue:立即終止當前迴圈步驟,進行下一次迴圈步驟。
練習1:用 while continue實現計算1到100之間的除了能被7整除之外所有整數的和。
練習2:用while break實現要求使用者輸入使用者名稱和密碼,只要不是admin、888888就一直提示要求重新輸入。

return:準確的說,return不是迴圈中斷語句,它代表跳出當前方法。


for迴圈

for(code1;code2;code3)。code1:迴圈的初始化程式碼,只在迴圈開始之前執行一次;code2,bool型別的表示式,每次迴圈完成前都判斷一下是否為true,只有為true才會進行本次迴圈;code3在每次迴圈之後執行一次。

for的三段都可以省略,但是不能丟了“;”。

break、continue同樣可以應用於for。

for和while程式碼之間都可以互相轉換,究竟用哪種方式則取決於一些慣用用法和個人習慣,不用記,程式碼寫多了自然就有感覺


for(int i=0;i<10;i++)

{
}

for(int i=100;i>0;i--)
{
}

for中終止條件注意是<還是<=。只要想好了想要的最後一個數是什麼、第一個數是什麼即可

用 for實現計算1到100之間所有整數的和。用 for實現計算200到300之間所有整數的和。


列舉

確定數量、確定值的幾個取值:東西南北、男女、上中下。

enum Gender{male,female}
enum QQStatus{online,offline,hidden}

列舉的用法,QQStatus status = QQStatus.online;
和用字串比起來,用列舉的好處就是限定了變數的取值範圍,程式處理起來更方便。

與class同級,也可放到單獨的類檔案中。


陣列

儲存多個值。幾乎任意型別都可以宣告陣列。

int[] nums = {5,3,8}

int[] nums = new int[3]

int[] nums = new int[3]{5,3,8}//個數和宣告數必須一致

int[] nums = new int[5]{5,3,8}//錯誤

使用索引器訪問指定編號位置的元素,訪問陣列元素:nums[0]、nums[1]。索引從0開始。取到的元素的型別就是陣列元素的型別。還可以對陣列元素進行賦值



練習1:從一個整數陣列中取出最大的整數

練習2:計算一個整數陣列的所有元素的和。

練習6:將一個字串陣列的元素的順序進行反轉。{"3","a","8","haha"} {"haha","8","a","3"}。第i個和第length-i-1個進行交換。

聯絡7:連線兩個int陣列為新陣列。

練習3:將一個字串陣列{"3","a","8","haha"}輸出為|分割的字串,"3|a|8|haha"

練習4:將一個整數陣列的每一個元素進行如下的處理:如果元素是正數則將這個位置的元素的值加1,如果元素是負數則將這個位置的元素的值減1。

練習5:有一個整數陣列,請宣告一個字串陣列,將整數陣列中的每一個元素的值轉換為字串儲存到字串陣列中。string[] strs = new string[values.Length];
























相關文章