【C#】基礎知識

來源:互聯網
上載者:User
  • 變數的範圍和存取層級
  • 申明各種資料類型的變數
  • 在C#程式中控制執行流
  • 注釋和XML文擋說明
  • 前置處理器指令
  • 用法規則和命名規定(略)

 

1.編譯運行C#程式:建立xx.cs檔案->設定環境變數->開啟命令列提示符->cscxx.cs->編譯代碼->自動產生xx.exe 注意:未設定環境變數的兩種解決方案:(1)運行csc之前,命令列運行批次檔%Microsoft Visual Studio2005%\Common7\Tools\vcvars32.bat,其中,Microsoft Visual Studio2005是安裝VS2005的安裝目錄.(2)開始->程式->Microsoft VisualStudio 2005->Microsoft Visual StudioTools子功能表->Microsoft Visual Studio 命令提示

2.修飾符static表示方法不能在特定執行個體上執行,因此不必先執行個體化類再調用。

3.變數:datatype(資料類型)identifier(變數名)

int i;編譯器不讓我們使用變數,除非初始化該i變數,但它在堆棧中分配了4個位元組以儲存其值。

變數的初始化:(1)實值型別初始化:int i=1;(2)參考型別初始化:SomethingobjSomething =new Something();

4.變數範圍:可以訪問該變數的代碼地區

(1)同名變數不能在同一範圍內申明兩次:如int i=20;...;inti=30;是錯誤的

(2)迴圈內部同名變數可以在同一範圍內申明兩次:如for(int i=0;i<10;i++){...};for(inti=9;i>=0;i--){...};是正確的。

(3)同名變數在迴圈體外只能申明一次,不能在迴圈內繼續申明。

(4)欄位(申明為類型級的變數)和局部變數(申明為方法級的變數)在同一範圍不衝突:classcar{static int i=20;public static voidMain(){int i=30;Console.WriteLine(i);return;}}

如何引用類級變數?object.fieldname(類名.欄位名)

如何訪問執行個體欄位(該欄位屬於類的一個特定執行個體)?this.fieldname(this.欄位名)

5.常量:const inti=20;(值不會在使用過程中發生變化稱~,在C#中只把局部變數和欄位申明為常量)

常量特性:(1)必須聲明時初始化,指定值後不修改(2)在編譯時間能用於計算(3)常量總是靜態,不必用static修飾(4)用易於理解的清楚的名稱代替了不明確的數字或字串(5)使程式更易於修改(6)易於避免程式出錯。

6.預定義資料類型:實值型別(儲存在堆棧中)、參考型別(儲存在託管堆中)。

y=null;(表示不引用任何對象),基礎資料型別 (Elementary Data Type)int、bool、long都是實值型別;而複雜的包含許多欄位的較大類型(通常有類的情況下)規定為參考型別。

7.CTS類型:(如上一章介紹)string s=i.ToString();inti=s.ToInt32();

 

8.預定義的實值型別:基礎資料型別 (Elementary Data Type)(整型、浮點類型、字元類型、bool類型)+參考型別

(1)基礎資料型別 (Elementary Data Type):

整型(8個):sbyte(System.SByte)8位有符號整數、short(System.Int16)16位有符號整數、int(System.Int32)32位有符號整數、long(System.Int64)64位有符號整數、byte(System.Byte)8位不帶正負號的整數、ushort(System.Uint16)16位不帶正負號的整數、uint(System.Uint32)32位不帶正負號的整數、ulong(System.Uint64)64位不帶正負號的整數。(無符號:0~2n-1,有符號:-2n-1~2n-1-1)

uintui=1234U;long l=1234L;ulong ul=1234UL;

浮點型(2個):float(System.Single)32位單精確度浮點數(n=7位)、double(System.Double)64位雙精確度浮點數(n=15/16位).

未指定非整數類型則預設為double類型。如想指定為float,則最後加字元F(或f):floatf=12.3F;

Decimal類型(1個):decimal(System.Decimal)128位高精度十進位數標記法(n=28位),專用類型以及算財務貨幣。decimald=12.30M(精度更大的數字)

Bool類型(1個):bool(System.Boolean),值為true或false.注意:bool值和整數值不能相互轉換。

字元類型(1個):char(System.Char),表示一個16位的Unicode字元。注意:不允許在char類型和8位byte類型間進行隱式轉換。雖然8位足夠編碼英語中的每個字元和0~9數字了,但他們不夠編碼更大的符號系統中的每個字元(比如中文),因此有了16位Unicode模式,ASCII編碼就是Unicode的一個子集。chara=‘A’(字元用單引號而不用雙引號)。4位16進位Unicode值:'\u0041';帶有資料類型轉換的整數值:(char)65;表示16進位數:'/x0041'.

逸出序列:\' 單引號 、\''雙引號、\\ 反斜線、\0 空、\a 警告、\b 退格、\f 換頁、\n 換行、\r斷行符號、\t 水平定位字元、\v垂直定位字元

注意:C#本身有一個string類型,所以無須將字串表示為char類型的數組。

(2)參考型別:

object(System.Object)根類型,CTS中的其他類型都是從它派生而來的(包括實值型別)

string(System.String)Unicode字串

注意:stringfilepath="C:\\ProCSharp\\First.cs"<=> stringfilepath=@"C:\ProCSharp\First.cs"

@後面表示所有字元都看作是原來的含義,同時也可以包含分行符號。

 

9.流量控制:(1)條件陳述式:if(condition){statement(s);},else{statement(s);}

if(condition1){statement(s);},else if(condition2) {statement(s);}...elseif(condition N) {statement(s);} statement(s);

switch(condition){casecondition1:statement(s);break;casecondition2:statement(s);break;...default:statement(s);break;}

注意:case的值必須是常量運算式,不允許使用變數。運行時它禁止所有失敗的條件。只有當使用goto語句特別標記要啟用的後面case子句,才會允許繼續執行,同時標記沒有break的每個case子句為錯誤。解決方案:令一個case子句為空白,就可以從這個case跳到下一個case,這樣就不需要用goto語句來跳轉子句產生非邏輯錯誤了。值相同的不同常量所表示的case不能使用,但不同值的常量的case的排放順序是無關緊要的。switch...case語句的另一個作用在於可以用字串測試變數。

(2)迴圈語句:for迴圈:for(inti=0;i<100;i++){...}

嵌套的for迴圈用於矩形多維陣列中遍曆每個元素,最外部的迴圈遍曆每一行,內部迴圈遍曆某行上的每一列。每次迭代外部迴圈時,內部迴圈要徹底執行完畢。for(inti=0;i<100;i+=10){for(intj=i;j<i+10;j++){...}...}

while迴圈:while(condition)statement(s);先判斷迴圈條件,後執行迴圈。

do...while迴圈:do{...}while(condition);先執行至少一次迴圈,後判斷迴圈條件。

foreach迴圈:迭代集合總的每一項.foreach(inttemp in arrayOfInts){...}

注意:不能改變集合中各項的值(temp)。

(3)跳躍陳述式:goto語句:不能跳轉到像for迴圈這樣的代碼塊中,也不能跳出類的範圍,不能退出異常處理try...catch後面的finally塊。在switch...case語句之間跳轉使用goto語句相當方便,其他情況下goto語句不受歡迎。

break語句:退出各種迴圈,迴圈結束後就執行後面的語句。若放在嵌套的語句中,則執行最內部迴圈後面的語句。若放在switch語句或迴圈外部則編譯錯誤。

continue語句:必須在各種迴圈中使用,只從迴圈的當前迭代中退出,然後從下一次迭代開始重新執行,而不是退出迴圈。

return語句:退出類的方法,把控制返回方法的調用者,若有方法傳回值,則返回這個類型的值。

 

10.枚舉:publicenumTimeOfDay{Morning=0,Afternoon=1,Evening=2},枚舉可以調用方法執行有用的任務。例如:TimeOfDaytime=TimeOfDay.Afternoon;Console.WriteLine(time.ToString());

從字串擷取枚舉值方法:TimeOfDaytime2=(TimeOfDay)Enum.Parse(typeof(TimeOfDay),"afternoon",true);Console.WriteLine((int)time2);

注意:第一個參數:要使用枚舉的類型:typeof(枚舉類名),第二個參數要使用的字串,第三個參數是bool指定在轉換時是否忽略大小寫?Enum.Parse()實際上返回一個對象引用,把這個字串顯式轉換為需要的枚舉類型。

 

11.數組:數群組類型 []數組名

初始化數組:int[]integers=new int[32];注意:數組總是參考型別,無論它各個元素是不是實值型別。

訪問數組元素:integers[0]=32;表示第1個數組元素值是32.

動態分配數組記憶體位置:int[]integers;integers =newint[32];首先不進行初始化,建立一個Null 參考,然後用new關鍵字把這個引用指向請求動態分配的記憶體位置。

查看數組包含多少元素:intnumElements=integers.Length;

12.命名空間:namespacexx{class yy} <=> xx.yy

注意:命名空間與程式集無關。不允許在另一個嵌套命名空間中聲明多部分的命名空間。

13.using語句:便於使用其他命名空間中的類。

命名空間別名:using別名aa=xx; 使用別名執行個體化一個xx對象x1:aa::xx x1=new aa::xx();

14.Main()方法:主程式入口必須是類或結構的靜態方法static,且傳回型別必須是int或void

public static intMain(){...} 或 public static void Main(){...} 或 public static intMain(string[] args){...}

編譯多個Main()方法使其成了主程式進入點:使用/main,即:cscxx.cs/main:所屬類的全名

15.編譯C#檔案:/t:exe控制台應用程式(預設)、/t:library 帶有清單的類庫dll、/t:module 沒有清單的組件、/t:winexeWindows應用程式(沒有控制台視窗) /out輸出的C#檔案名稱、/reference或/r(程式集的路徑和檔案名稱),在未引用的程式集中參考型別。

 

16.控制台I/O:Console.Write()指定值寫入控制台、Console.WriteLine()輸出結果最後添加一個分行符號

格式化輸出:int i=10;intj=20;Console.WriteLine("{0}+{1}={2}",i,j,i+j);{0}{1}{2}分別表示第1,第2,第3個參數。也可以指定寬度w:{n,w}表示第n-1個參數的值寬度是w,調整文本在該寬度中的位置,正值表示靠右對齊,負值表示靠左對齊。如-{0,2}靠左對齊的第一個參數的值的寬度是2

預定義類型格式字串:C-本地貨幣格式 D -十進位格式(給定有效位數規範則加上前置字元0) E-科學計數法(指數),格式字串的大小寫(e,E)確定指數符號的大小寫  F-固定點格式,有效位數規範設定為小數位元,可以為0. G -普通格式(使用E,F格式取決於哪種格式更簡單)N-數字格式(用逗號表示千分符)P -百分數格式 X -16進位數格式(有效位數規範用於加上前置字元0),例如:C2表示兩位小數的貨幣單位。

 

17.注釋://單行注釋 “”

XML文擋注釋說明:///<c>把行中的文本標記為代碼</c><code>把多行標記為代碼</code><example>標記為一個代碼執行個體</example><exception>說明一個異常類</exception><include>包含其他文擋說明檔案的注釋行i</include><list>把列表插入到文擋說明中</list><param>標記方法的參數</param><paramref>表示一個單詞是方法的參數</paramref><permission>說明對成員的訪問</permission><remarks>給成員添加描述</remarks><returns>說明方法的傳回值</returns><see>提供對另一個參數的交叉引用</see><seealso>提供描述中的“參見”部分</seealso><summary>提供類型或成員的簡短小節</summary><value>描述屬性</value>

編譯為程式集產生XML文擋說明:csc /t:library/doc:xx.xml xx.cs

產生xx.xml文擋說明:<?xmlversion="1.0"?><doc><assembly><name>xx</name></assembly><members><membername="T:命名空間的類名"><summary>...</summary><returns>...</returns><paramname="aa"></param></members>其中“T:”表示這是個類型,“F:”表示這是個欄位,“M:”表示這是個成員

 

18.C#前置處理器命令:

#define DEBUG定義符號DEBUG,這個符號不是實際代碼的一部分,而只在編譯器編譯代碼時存在。

#undef DEBUG刪除符號的定義。若符號不存在,#undef沒有任何作用。若符號存在,則#define也不起作用。必須把#define和#undef命令放在C#原始碼開頭,在聲明要編譯的任何對象的代碼之前。

#if #elif #else#endif條件編譯(先檢查符號是否存在,若存在只編譯#if塊中的代碼,否則會忽略所有的代碼直到遇到匹配的#endif指令為止)

#warning #error警告和報錯編譯(使用#error可以檢查#define語句是否做錯什麼事,而使用#warning可以讓自己想起做過什麼事)

#region #endregion把一段代碼標記為給定名稱的一塊

#line可用於改變編譯器在警告和錯誤資訊中顯示的檔案名稱和行號資訊。#line default可以把行號恢複為預設的行號

#pragma抑制或恢複指定的編譯警告,可在類或方法上執行,對抑制什麼警告和抑制時間進行更精確的控制

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.