C?;A(chǔ) =
當前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
1. 第一個C#程序
using System; namespace aa { class MyFirstClass { static void Main() { Console.WriteLine("This isn''t at all like Java!"); Console.ReadLine(); return; } } } 說明: (1) 每個語句必須用一個分號(;)結(jié)尾 (2) 語句可以寫在多個代碼行上,不需要使用續(xù)行字符 (3) 單行注釋以“//”開頭,多行注釋/* …*/ (4) 跟Java一樣,所有的C#代碼都必須包含在一個類中 (5) 每個C#可執(zhí)行文件都必須有一個入口點——Main()方法,該方法要么返回void,要么返回一個整數(shù)(int) 2. 變量 2.1 變量的定義 在c#中聲明變量使用下述語法:datatype identifier; 例如: int i; 無論變量的數(shù)據(jù)類型是什么,聲明變量的c#語法都是相同的。 多個變量的聲明,如果類型相同,可以用一個語句聲明,如果類型不同,必須用多個語句聲明: 例如:int x=10,y=20;// x and y are both ints int x = 10, bool y = true;// this won’t compile! 2.2 變量的初始化 C#編譯器需要對變量初始化之后才能在操作中引用該變量,C#編譯器把未初始化的變量當作錯誤來看 待,這樣可以防止我們無意中從其它程序遺留下來的內(nèi)存中獲取垃圾值。 在C#中實例化一個引用對象需要使用new關(guān)鍵字。 objSomething = new Something(); // this creates a Something on the heap 2.3 變量的作用域 一般情況下,確定作用域有以下規(guī)則: 1) 只要字段所屬的類在某個作用域內(nèi),其字段也在該作用域內(nèi)。 2) 局部變量存在于表示聲明該變量的塊語句或方法結(jié)束的封閉花括號之前的作用域 3) 在for、while或類似語句中聲明的局部變量存在于該循環(huán)體內(nèi)。 4) 同名的局部變量不能在同一作用域內(nèi)聲明兩次。 public static void Main() { int j = 20; for(int i=0;i<10;i++) { int j=30;//Can''t do this -j is still in scope Console.WriteLine(j+i); } } 5) 編譯器可以區(qū)分字段和方法中的局部變量。 using System; namespace aa { class ScopeTest2 { static int j = 20; public static void Main() { int j = 30; Console.WriteLine(j); return; { } } 3. 常量 常量格式:const int a = 10; 在C#中,只能把局部變量和字段聲明為常量。 說明: 1) 常量必須在聲明時初始化,且不能更改 2) 常量的值必須在編譯時用于計算。因此不能從一個變量中提取值來初始化常量。如果需要這么做,應使用只讀字段 3) 常量總是靜態(tài)的 4) 常量在程序中至少有3個好處:a)使程序更易于閱讀 b)使程序更易于修改 c)更容易避免程序出現(xiàn)錯誤 4. 預定義數(shù)據(jù)類型 C#把數(shù)據(jù)類型分為兩種:值類型和引用類型。 值類型直接存儲其值,數(shù)據(jù)存儲在堆棧中;引用類型存儲對值的引用,而數(shù)據(jù)存儲在托管堆上。 C#有15個預定義類型,其中13個是值類型,2個是引用類型(string和object)。 13個值類型包括8個整數(shù)類型sbyte、short、int、long、byte、ushort、uint、ulong;2個浮點類型float、double;1個deciaml類型decimal;1個bool類型bool;一個字符類型char; 1) 如果代碼沒有對某個非整數(shù)值硬編碼,則編譯器一般假定該變量是double。如果想指定值為float,可以在其后加上字符f(或F) float f = 2) decimal類型不是基本類型,所以在計算時使用該類型會有性能損失,要把數(shù)字指定為decimal,可以在數(shù)字后面加上字符m(或M) decimal d = 3) bool值不能和整數(shù)值轉(zhuǎn)換,bool值必須是true或者false。 4) C#中,可以在字符串前面加上字符@,那么字符串中的所有字符都看作是其原來的意思。 string filepath = @”C:\ProCSharp\First.cs”; 5. 流控制 1)條件語句(if語句、switch語句) a)if子句中的表達式必須等于布爾值,當“==”誤寫成“=”時,會導致一個編譯錯誤。 b)case的值必須是常量表達式——不允許使用變量,且常量不能相同(字符串可以作為測試變量)。 如果一個case子句為空,就可以從這個case跳到下一個case上,這樣就可以用相同的方式處理兩個或多個case子句。 在C#中,switch子句里面case子句的排放順序是無關(guān)緊要的。 2)循環(huán) C#除了for循環(huán)、while循環(huán)和do…while循環(huán) 以外增加了foreach循環(huán)。foreach循環(huán)可以迭代集合中的每個項目,但不能改變集合中各項的值。 如果需要改變各項的值,就應使用for循環(huán)。例如:
foreach(int temp in arrayOfInts) { Console.WriteLine(temp); } 3)跳轉(zhuǎn)語句(goto、break、continue、return) goto跳轉(zhuǎn)到程序中用標簽指定的另一行:
goto Label1; Console.WriteLine(“this won’t be executed”); Label1: Console.WriteLine(“Continuing execution from here”); goto語句有兩個限制:不能跳轉(zhuǎn)到像for循環(huán)這樣的代碼塊中,也不能跳出類的范圍,不能退出try…catch塊后面的finally塊。 break可以用于退出for、foreach、while、或do…while循環(huán)。 continue只從循環(huán)的當前迭代中退出,然后在循環(huán)的下一次迭代開始重新執(zhí)行,而不是退出循環(huán)。 return用于退出類的方法,把控制返回方法的調(diào)用者。 6. 枚舉 枚舉是用戶定義的整數(shù)類型,在聲明一個枚舉時,要指定該枚舉可以包含的一組可接受的實例值。 public enum TimeOfDay { Morning,Afternoon,Eveing } 7. 數(shù)組 定義:int[] integers; 初始化:integers = new int[32]; 所有的數(shù)組都是引用類型,并遵循引用的語義 8. 命名空間 命名空間提供了一種組織相關(guān)類和其它類型的方式,它時一種邏輯組合,而不是物理組合。 namespace CustomerPhoneBookApp { using System; public struct Subscriber { } } 命名空間可以嵌套,注意不允許在另一個嵌套的命名空間中聲明多部分的命名空間。 為了避免命名空間輸入的繁瑣,可以用using語句來解決。 using System; using Wrox.ProCSharp; 命名空間也可以用別名來代替:using alias = NamespaceName; 9. Main()方法 C#程序是從Main()方法開始執(zhí)行的,該方法必須是類或者結(jié)構(gòu)的靜態(tài)方法,且返回類型必須是int或void。 如果程序包含多個Main()方法,編譯器就會返回一個錯誤,但是可以使用/main選項,顯示的告訴編譯器把哪個方法作為程序的入口點: 例如:csc MainExample.cs/main:Wrox.ProCSharp.Basics.MathExample 也可以為Main()方法傳送參數(shù): public static int { } 編譯好之后,可以在執(zhí)行文件名后面加上參數(shù): ArgsExample /a /b /c 10. 控制臺I/O Console.ReadLine()從控制臺讀取一行文本 Console.Write()將指定的值寫入控制臺窗口 Console.WriteLine()輸出的結(jié)果最后添加一個換行符 格式化顯示: Console.WriteLine(“{0} plus {1} equals {2}”, i,j,i+j); 也可以指定寬度,{n,w} n是參數(shù)索引,w是寬度值,正值表示右對齊,負值表示左對齊 還可以使用格式字符串: Console.WriteLine(“{0,9:c2}”,i); 最后,可以使用占位符來代替這些格式字符串: double d = 0.234; Console.WriteLine(“{0:#.00}”,d) 結(jié)果為:0.23 11. XML文檔說明 ///<summary> /// The Add method allows us to add two integers ///</summary> ///<returns>Result of the addition(int)</returns> ///<param name=”x”>First number to add</param> ///<param name=”y”>Second number to add</param>
編譯:csc /doc:Math.xml Math.cs 12. C#預處理指令 預處理指令不會轉(zhuǎn)化為可執(zhí)行代碼中的命令,但會影響編譯過程的各個方面。例如:可以使用預處理指令禁止編譯程序編譯代碼的某一部分。 1)#define和#undef #define DEBUG 告訴編譯器存在給定名稱的符號 #undef DEBUG 刪除符號的定義 必須把#define和#undef放在C#源代碼的開頭,在聲明要編譯的任何對象的代碼之前。 #define本身沒有什么用,必須跟其它預處理指令結(jié)合使用。 2)#if,#elif,#else,#endif 這些指令告訴編譯器是否要編譯某個代碼塊
int DoSomeWork(double x) { #if DEBUG Console.WriteLint(“x is ” + x);//這行代碼只有在定義了DEBUG后才會執(zhí)行 #endif } #elif(=else if)和#else 指令都可以用在#if塊中,也可以嵌套#if塊 3)#warning 和#error 當編譯器遇到它們時,會分別產(chǎn)生一個警告或者錯誤。如果遇到#warning,會給用戶顯示#warning指令后面的文本,之后編譯器繼續(xù)進行。如果遇到#error,會給用戶顯示#error后面的文本,作為一個編譯錯誤信息,然后會立即退出編譯,不會生成IL代碼。 4)#region和#endregion 用于把一段代碼標記為給定名稱的一個塊,使代碼布局清晰明了 5)#line 用于改變編譯器在警告和錯誤信息中顯示的文件名和行號信息。這個指令用得不多。 該文章在 2017/2/7 18:53:21 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |