C#學習筆記第一發---C#基礎(類型和基礎文法)

來源:互聯網
上載者:User

標籤:interface   +=   判斷   orm   class   定義   form   int   nullable   

  首先,資料類型分為實值型別和引用資料類型以及指標類型(暫不涉及):實值型別是指直接儲存在記憶體的棧上面,參考型別則在棧上儲存一個引用,在堆上儲存具體的值。

實值型別分為內建類型和使用者可以自訂的struct類型、enum類型,這些類繼承於system.ValueType類,而system.ValueType繼承於system.Object類,Object類是所有類的基類。

實值型別如int、bool都是通常使用的別名,正式名為system.Int32、system.Boolean。

另外可以用var來命名一個變數,這樣可以暫時不確定他的資料類型。

struct類似於JAVA中的分裝類型,用於自訂一個類,可以包含不同的屬性;

enum枚舉類型相當於設定了一個數列,所建立的變數只能取值數列中的值,每個值自動預設對應從0開始的int值,但是可以手動強制從別的數開始或者強製為其他的資料類型。

舉個栗子: days : short { monday = 5, tuesday, wenesday, thursday, friday, saturday, sunday }

struct和enum類型的定義要寫在main方法體外!!!!結束沒有分號!!!!

參考型別首先是三個內建類型:string、object、dynamic。其中dynamic強制規定類型檢查在運行階段而不是編譯階段。

string類型兩種賦值方式可以得到相同的值,但是在底層的代價是不同的(兩種方法:string a="abcdefg";string b="abcd";b+="efg"),建議使用第一種,第二種對系統需求的代價較大,需要經常修改的值可以使用stringbuilder類型獲得可變長的記憶體空間。

重點:stringbuilder方法AppendFormat使用方法

StringBuilder s = new StringBuilder ();
s.AppendFormat("hello{1}{0}","ld","wor");

可以將s值賦值為helloworld。

接下來是class類型,class類可以包含成員變數和內部方法,預設的存取修飾詞是private,外部不可訪問,可以手動修改為public。C#的get set方法不是單獨的方法而是使用關鍵字get set,直接調用get set關鍵字就可以使用對應的方法;靜態方法綁定與class名,不可以用執行個體化的對象訪問,而是用類名直接存取。

interface介面內部只能聲明方法,沒有具體的實現方法,子類中必須要實現介面中的方法。

abstract class抽象類別是不能被執行個體化的,但是內部可以定義方法,子類可以預設的調用抽象類別內部的方法,也可以在自身內部重寫同名方法,實現方法的重載。介面不可以包含成員變數,抽象類別可以具有自己的成員變數,並且被子類繼承。

類的分類熟悉之後是類的轉換,C#中的類型轉換分為顯示轉換和隱式轉換,C#是一種強型別的語言,在編譯時間會檢查類型。

隱式轉換適用於範圍較小的類轉為範圍較大的類,不會有值的丟失,顯示轉換則適用於範圍較大的類轉換為範圍較小的類,但是容易造成值得精度等丟失。

類型轉換中有兩個重要的關鍵字as,is。

is用於判斷能否轉換為一個類,輸出結果為ture或者false,分別表示是否可以轉換為目標類型,如果是ture,則可以使用as進行轉換,但是as只能用於參考型別和非空類型,如果用於實值型別的轉換則會報錯,因為在轉換時由大類轉為小類會賦值給小類一個空值,而實值型別不可以為空白。

實值型別的轉換可以使用convert類下的方法或者對應類下的parse方法或者TryParse方法,使用TryParse方法轉化不能轉化的值時會賦值一個預設值。還可以使用繼承介面IConventible或TypeConventer來自訂自己得類型轉化方法。

實值型別和參考型別的互相轉換通常稱為裝箱和拆箱,裝箱屬於隱式轉換,不需要專門的文法,拆箱則可以通過顯示轉換實現。

拆裝箱有一個常見的問題是不可為空白的類型被賦值為空白,這會報錯,解決的方式可以在變數命名時變數名後加?來使得這個值可為空白,同等意義的命名方法還有System.Nullable<int> i=10;這時這個i可以被賦值為空白,但是讀取時會報錯,解決方案是使用HasValue來取值,為空白則會返回false,或者使用方法GetValueOrDefalt,在空值是返回預設值。修改預設值可以使用雙問號:int k=i ?? 20;則在i為空白時賦值k為20,如果i有值則正常賦值。

 

接下來是數組,數組是一個參考型別,所有數組都繼承於基類system.Array,這是一個抽象類別,不能被執行個體化。

一維數組int[] numbers=new int[5];

二維數組int[,] numbers=new int[5,4];

數組的數組int[][] numbes=new int[5][4];

數組的數組又被稱為交錯數組,每一行可以有不同的長度。

以上都是固定長度的數組,所有數組的長度都是在定義時確定的,如果要使用變長的數組可以使用ArrayList數組列表,數組列表可以儲存不同的類型,易引起混亂,建議使用List,List可以使用泛型規定內部的實值型別。寫法如下List<int> intList=new List<int>();這個列表中就只能使用int類型的值。

之上都是使用位置來訪問列表中的值,而使用Hashtable雜湊表可以自己定義每個值的key,Hashtable沒有強制規定類型,如果需要強制規定,可以使用Dictionary來強制規定,寫法如下Dictionary<string,string> d=new Dictionary<string,string>();強制規定了key和value都是string類型。Hashtable訪問不存在的key時會返回一個空值,而在Dictionary中則會報錯。但是Dictionary線程不安全,在多線程中建議使用ConcurrentDictionary。另外還有SortedList,會自動的根據key值對數組進行排序;stack數組先進後出的數組,類似於一個堆棧;queue是一個先進先出的數組。

然後是C#內的基礎文法--邏輯語句

邏輯運算子和其他的語言並沒有什麼區別,比較特別的是在if判斷之後的程式只有一行時可以省略大括弧,但是出於編程習慣不建議使用。

 比較有意思的一個迴圈方式是使用foreach迴圈,這是一個簡便的寫法,使用這一迴圈必須是集合類型實現了IEnumerable介面的才可以。

List<int> iss=new List<int>(){1,2,3};

foreach(int i in iss)

{

Console.WriteLine(i);

}

Console.ReadLine();

這樣就迴圈輸出了iss中的每個值。

 

C#學習筆記第一發---C#基礎(類型和基礎文法)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.