上一章講到關於項目工程開發常用的知識點,有了前面倆章的介紹之後。本章正式開始介紹關於C#的基礎語法。我們都很清楚C#也是面向對象的計算機語言。而且他跟JAVA的相似度高達80%。所以很多語法點基本上是一樣子。學過JAVA的人,現在開始學習C#的話。面臨最大的問題是環境的不熟悉。如開發環境。同時有一點希望讀者們心裡要明白。如果以為看了筆者的博文就可以說學會了,那我只能說你天真了。筆者的博文只能算是一種協助而以。加速你對C#的認識和了解。並且筆者不會更深入的講解C#,一切以入門上手為主。當然不可否認的是筆者寫的知識也不一定是正確的。
基礎語法之數據類型數據類型。也就是所謂的變量。這是基礎中的基礎。讓我們看一下C#有哪一些常用的數據類型。
C#:
int intValue = 1;//跟JAVA一樣子。只是C#這邊有把int分為int32,int16,int64。其中int64好像就是long類型 long longValue = 2l;//跟JAVA一樣子。 float floatValue = 1f;//跟JAVA一樣子。 double doubleValue = 2d;//跟JAVA一樣子。 string stringValue = "aomi";//C#裡面字符串類型有倆種:string,String(注意頭字母大寫)。常用是string類型寫法。String是string對應的對象類型。而且JAVA只有String類型。 char charValue = 'c';//跟JAVA一樣子。 bool boolValue = false;//跟JAVA的boolean一樣子。只是這裡少了ean。同時C#本身也有bool對應的Boolean對象類型。 decimal decimalValue = 3.4m;//C#獨有的。也是浮點數。一般用於錢相關的業務。跟float,double用法是一樣子。只是這個是以M為結尾。 int? intMark = null;//可以為空的數據類型。C#獨有的。在JAVA筆者沒有見過 var varInt = 1;//有一點像弱化類型一樣子。主要是編譯器會根據上下文來判斷當前變量的類型。 var varString = "aomi"//同上
上面是開發時候常用數據類型的定義。我們可以看出來。只有要記住幾個不同點就可以學會這邊的知識點了。
1.decimal類型不同:只要明白他跟double的用法是相似的(如果要深入的話,是不一樣子)。
2.string類型不同:JAVA頭字母是大寫。而C#卻是小寫。同時注意的是string類型的比較。C#用的是==和Equals方法,倆種比較方式都是比較值的(當然,非字符串是比較引用)。但JAVA卻不一樣子。這個你們懂的。
3.bool類型不同:少了ean。用法是一樣子。
4.var的關鍵字:有一點像弱化類型一樣子。主要是編譯器會根據上下文來判斷當前變量的類型。
5.數據類型?:可為空的數據類型。INT類型一般默認值為0,不可能為null。也不可能等於null。當加了?那就是不一樣子。
清楚了數據類型的定義之後,就要了解一下數據類型之後轉化。C#這邊筆者最常用的就三種方式的轉化。如下
C#:
int parseVlaue = Int32.Parse("123"); int convertVlaue = Convert.ToInt32("123"); int value = (int) 4.5d;
上面的代碼是三種常用的類型轉化的方式。關於用Parse方法相信JAVA也常看到。如Integer.parseInt。筆者不多說。中間那種方式才是C#中最常用的方法。也是JAVA中筆者沒有看到的。Convert類是一個用於轉化的工具類。裡面包含了很多種轉化方法。如何學習呢?寫一下Convert.這個時候開發工具就是提示各種方法出來。這不是可以學習了嗎?或是按快捷鍵Ctrl+J。提示窗體如下
上面的轉化都是顯性轉化,關於隱性的轉化。筆者就不多提。還有一點值得注意:1.C#有一個一般對象都會有的方法ToString。有時候這個方法會幫你轉化對應的字符串。
基礎語法之判斷和循環語句數據類型結束之後,便是對應的判斷和循環語句了。讓我們選看一下關於判斷語句的用法吧。
C#:
var ifIntValue = 123; if(ifIntValue > 100) { //邏輯代碼 } else if(ifIntValue < 10) { //邏輯代碼 } else { //邏輯代碼 } string aomi = "aomi"; switch(aomi) { case "aomi": //邏輯代碼 break; default: //邏輯代碼 break; }
顯然判斷語句沒有什麼差別。如果硬要說的話。筆者到是發現一個奇怪的結果:上面default:裡面的break;C#這邊不能刪。刪了會出錯。JAVA卻可以。
了解完了判斷語句之後,讓我們了解一下循環語句吧。同樣子以帶代碼來看
int j = 0;
while(j<10) { //邏輯代碼 } do { } while(j<10); for(int i=0;i<10;i++) { //邏輯代碼 } string[] values = { "aa", "bb" }; foreach(string v in values)//相當於JAVA的for(變量類型 變量名 : 數組變量); { //邏輯代碼 }
我們可以看到最後一個的不同點:JAVA是用for(變量類型 變量名 : 數組變量);而且C#是foreach(變量類型 變量名 in 數組變量)。特別注意的是這裡:和 in 的細微差別。另外循環裡面的break和continue的用法是不是一樣子。
基礎語法之數組和集合數組的概念大家都知道。實例化的形式不管是JAVA還是C#都是一樣子。實例化常用方式筆者認為有三種:
1.實例化不帶初始值。
int [] array = new int[4];
2.實例化帶有初始值。
int [] list = new int[4]{1,2,3,4};
上面這段代碼在C#裡面是通得過的。可是JAVA卻不行。必須把[4]裡面數值4去掉JAVA才能通過了。即是把[4]修改成[]。但是C#裡面去不去數值4都可以通過。
3.匿名實例化數組。倆邊通得過。到是這一點讓筆者沒有想到的。
String[] values = { "aa", "bb" };
集合類可以說是編程中最常用的一個部分。C#集合類可以說都是在System.Collections命名空間下。那們大部分是實現於三個接口類:IList接口、ICollection接口、 IEnumerable接口、IDictionary接口。筆者喜歡把集合類分為倆種:一是集合;一種是字典。
IEnumerable接口:大白話講這個接口就是跟foreach有關系。迭代集合時候需要實現的接口。筆者一直不知道如何去說明這個接口。類似於JAVA的Iterator接口。
ICollection接口:獲得集合類的數量和復制一個數組類型。
IList接口:類似於JAVA的List接口的功能。
IDictionary接口:類似於JAVA的Map接口的功能。
那麼C#這邊常用的實例化用法如下
IList strList = new ArrayList(); ArrayList strList = new ArrayList();
ArrayList類算是集合類常用的一個類。對於獲得集合裡面的一個元素的話。C#這邊略有一點不同。
IList strList = new ArrayList(); object obj = strList[0];
strList[0]代碼就是相當於JAVA的strList.get(0)。那麼刪除呢?
IList strList = new ArrayList(); strList.RemoveAt(0);
上面是刪除中的一種。還是有一種就是傳一個集合對應的值進行刪除。最後看一下增加。
int aaa = 1; IList strList = new ArrayList(); strList.Add(aaa);
上面筆者說喜歡把集合類分為倆種,上面是集合部分。接下來讓我們看一下字典部分。字典相信大家都知道 一個KEY就有對應的一個VALUE。即是鍵值對。
IDictionary dic = new Hashtable(); dic.Add("aomi", 123);
上面就是實例化一個字典並增加對應的數據。一看就明白如何增加數據了。
IDictionary接口裡面有倆種很重要的屬性成員:Keys和Values。分別用於存放鍵的集合和值的集合。所以我們可以根據這倆個屬性成員做很多事情。
IDictionary dic = new Hashtable(); foreach(object keyObj in dic.Keys) { Console.WriteLine(dic[keyObj]); }
跟上面的集合的獲得方式有一點像了。dic[keyObj]相當於dic.get(key)。當然我們也可以直接把Values做迭代。筆者就不多說了。至於刪除就是調用Remove方法傳入對應的鍵參數。
上面的知識是很早以前常用的一些寫法。現在版本的變化。對應的很多常用的知識也代替了。不過寫法都不會變。
ArrayList類被List<T>類取代。
Hashtable類被Dictionary<TKey,TValue>類取代。
上面和T、TKey、TValue都是泛型。下面就是對應的實例化。
IList strList = new List<object>(); IDictionary dic = new Dictionary<object,object>();
集合類除了上面講到的之外。還有Queue類、SortedList類、 Stack類等。筆者這裡就不多介紹了。有心的朋友可以去找一下資料。
注意:在我們應用中常常會講到線程安全的集合類:
1.ConcurrentQueue
2.QueueConcurrentStack
3.ConcurrentBag
4.ConcurrentDictionary
5.BlockingCollection
本章總結本章主要是對C#基礎語法進行講解。筆者相信對於有經驗的JAVA開發人員來講很簡單的。同時我們也可以看到JAVA和C#之間的語法點差不多。更多只是在寫法的不同而以。