【C#高級編程】筆記之核心C#


 

 Main()方法

  每一個C#可執行文件(如控制台程序、Windows程序和Windows服務)都必須有一個入口點——Main()方法(注意M大寫)。

這個方法必須是類或靜態方法,並且返回類型必須是int 或 void。不過給這個方法定義什么訪問級別並不重要,一般定義為public,不過你要是把它定義成了private,你會發現它還是能夠運行的。

同一個程序中只能有一個Main()方法,如果你一定要定義好幾個Main方法,你就得明確告訴編譯器 哪個Main()方法才是程序的入口。

另外,Main()方法也是可以有參數的:public static int Main(string[] args) {}  

  • 變量

  C#的變量必須初始化,這是C#強調安全性的一個重要例子。大多數編譯器會把沒有初始化做為一個警告處理,但是C#編譯器會把它當做一個錯誤處理。這樣,可以防止我們無意中從其他程序遺留下的內存中獲取到垃圾值。

C#通過兩種方法保證變量進行初始化:1.對於類或結構中的字段,如沒有顯式初始化,在創建他們的時候會賦給它們一個默認值;2.對於方法中的局部變量,則必須先進行初始化,然后才能在后面的語句中使用它們的值。

C#中實例化一個對象,必須使用new關鍵字。 

  • 類型推斷(匿名類型)

  類型推斷:var myAge = 19;//編譯器可以根據變量的初始值“推斷“變量的類型;與Javascript的變量的申明一致啊

使用類型推斷需要遵守這幾條規則:1.變量必須初始化,不初始化無法判斷類型的;2.初始值不能為空;3.初始化器必放在表達式中;4.不能把初始化器設置為一個對象,除非在初始化器中申明一個新的對象。 

  • 變量的作用域 

 1.只要類在某個作用域內,其字段(成員變量)也在該作用域內;2.在for、while等類似的語句中申明的局部變量存在於該循環中;3.局部變量在於申明該變量的塊語句中,或方法結束的右大括號之前的作用域內

C#在變量之間有一個基本的划分,它把類型級別的申明看作字段,而把方法中申明的變量看局部變量 

  • 常量

  1.常量必須在申明的時候初始化;2.常量的值必須在編譯時用於計算,所以從一個變量獲取的值給常量 賦值是行不通的;3.常量總是靜態的,所以不請允許用static修飾常量;4.使用常量可以程序更加易讀、易修改、避免出現錯誤的機率。 

  • 數據類型 

   C#把數據類型分為兩種:值類型和引用類型。值類型存儲在堆棧中,而引用類型存儲在托管堆上。

C#中有15個預定義類型,其中 13個是值類型,2個引用類型(string和object),大多數C#數據類型,包括我們定義的類,都是引用類型。

在C#中,所有的數據類型都以與平台無關的方式定義,如:int總是32位帶符號的整型,short有16位長,long有64位長,這與C++有很大的差異。 

decimal類型,128位的高精度,專為財務計算而設計,充分彌補的double類型的不足。

string雖然是引用類型,但是在操作上還是有 一些區別。例如:字符串是不可改變的,修改其中一個字符串,會創建一個全新的對象,而另一字符串不發生變化  

 

復制代碼
string s1 = "a string";                .
string s2 = s1;
Console.WriteLine("s1 is " + s1);
Console.WriteLine("s2 is " + s2);
s1 = "another string";
Console.WriteLine("s1 is now " + s1);
ConsoletWriteLine("s2 is n°w " + s2);

輸出結果:
s1 is a string
s2 is a string
s1 is now another string
s2 is now a string
復制代碼

 

  • 流控制
C#中的流控制語句與C++\JAVA基本相同,沒什么大的變化。除了switch語句,在C#中,switch語句的一個有趣的地方是case子句的排放順序是無關緊要的,甚至可以把dcfault子句放在最前面。所以,一個重要的條件就是任何兩條case語句后的常量值都不能相同!

C#中的goto語句有兩個限制:1.不能跳進循環中 ;2.不能退出finally塊。和C++一致 

  • 命名空間

   命名空間提供了一種組織類和其他類型的方式。與文件和組件不同,它是一種邏輯組合,而不是物理組合。所以可以一同一個程序集中使用不同的命名空間,也可以在多個程序集中定義同一個命名空間的類型。

建議在一個項目開始之前,就定義命名空間的層次定義。一般比較接受的格式是這樣子的:公司名.項目名.系統的各大部分。公司應當花一些時間開發一種命名空間模式,這樣其開發人員就可以快速定位到他們所需要的功能上。

如果命名空間的名字很長,別忘了給它起個別名:using alis=namespaceName;  

  •  注釋

   C#的注釋方式使用傳統的C語言風格的注釋,單行用// ,多行用 /*  */  。需要注意的是,可以把多行注釋用在代碼之中,雖然並不推薦這么使用:

  Console.WriteLine("this is a book"/*向控制輸出一句話*/); 

  當然,C#還有一種更強大的注釋 ///  。用這樣的一條語句,C#的編譯器就可以把這種注釋從代碼文檔中抽取出來,存入一個XML文檔之中:

csc /t:library /doc:MathLibrary.xml  MathLibrary.cs

讓我解釋一下:csc就是編譯器了;/t:library  /doc:MathLibrary.xml  是一個參數,注意中間的空格,MathLibrary.xml 是要生成的XML文檔的名字;MathLibrary.cs 是什么我不想再解釋了 

  • C#預處理器指令 

   使用預處理器指令可以禁止編譯器編譯代碼的某一部分。如果計划發布兩個版本的代碼,即基本版本和擁有更多功能的企業版本, 就可以使用這些預處理器指令。需要注意的是C#中的預處理器指令可不像C++那么豐富,它們的使用也並不頻繁,常見的預處理器指令如下:

#define和#undefine  :定義一個符號(或者說變量也行啊,我習慣叫符號)。undefine就是刪除定義過的符號 

#if  #eif  #else  #endif   :功能和C#中的流程處理語句一樣的,很少用到

#warning   #error    :編譯器遇到它們會分別差生警告和錯誤

#region    #endregion    :把一段代碼標記為給定名稱的一個塊,最有用的一組指令就是它啦,美化代碼必用! 

  • C#編程規則 

   1.標識符規則:必須以字母或下划線開頭;不能使用關鍵字做標識符,如果非要用,請在標識符前加@,例:int @abstract;標識符也可以使用Unicode字符,用語法\uXXXX表示,如: _Identifier 與  \u005fIdentifier 是一樣的定義。最的上圖一張:

 

  要認真理解這上面所有的關鍵字,理解了,C#語言這一塊就算是基本過關了。

 2.用法約定:定義變量時不使用任何前綴;定義名稱、命名空間的風格應該保持一致,名稱不應該與任何關鍵字發生沖突;字段應該總是私有的;

 

這一章介紹的內容都是一些C#基礎的東西,不過細細總結,發現需要注意的東西還真不少,希望對看到這篇博文的人有所幫助. 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM