C#與.net
C#本身是一種語言;.NET Framework是一個平台即一個環境。
只是C#編譯器專門用於.net,所以C#代碼總是使用.net運行。
.net Framework 的核心是運行執行環境(公共語言運行庫CLR、.NET運行庫).
在CLR下運行的代碼稱為托管代碼(mannaged code)
CLR對於源代碼(code)的執行過程:
1..net將code編譯為IL 2. CLR將IL編譯為平台專用代碼
IL:Microsoft中間語言(使用數字代碼)
IL中間語言
特點:
1.面向對象和使用接口
2.值類型和引用類型的顯著差異
3.強數據類型化
4.使用異常來處理錯誤
5.使用特性(attribute)
關鍵詞:CTS:通用類型系統 CLS:公共語言規范
垃圾回收:一般兩種方式:手動釋放;對象維護計數;
安全性:代碼訪問安全性;
應用程序域(application domain):分離組件的一種方式。(有跨應用程序域邊界對象訪問的方式)
進程:用來孤立代碼的唯一方式。
所有的C#代碼都必須包含在一個類中。
類型推斷(type inference): 使用var關鍵字。編譯器根據變量的初始化值“推斷”變量的類型
變量作用域:
字段和局部變量的作用域沖突:區分名稱相同、作用域相同的兩個標識符:將類級別聲明的變量標識為字段,將方法中聲明的變量看做局部變量,這種情況下變量可以重名(但是在方法中的變量會隱藏類級別的變量),引用類級別的變量可以使用object.fieldname(需區分靜態訪問Object.fieldname與非靜態訪問this.fieldname)
常量(conts)
常量總是靜態的(不必在聲明中使用static);必須在聲明時初始化,而且指定值后不能再改寫;必須能在編譯時用於計算,即不能使用變量值來初始化常量(只讀字段可以這么做);
預定義數據類型
值類型與引用類型
值類型直接存儲其值,引用類型存儲對值的引用(值對象在托管堆上的地址);值類型存儲在堆棧中,引用類型存儲在托管堆上;
一般將自己的類型定義為值類型可以把它聲明為結構。
C#有15個預定義類型,其中13個值類型,兩個引用類型(string 和 object)
C#認可的基本類型沒有內置於C#語言中,而是內置於.net framework中。eg:C#中的int 實際上是.net結構中的system.Int32;
意義:在語法上可以把所有的基本數據類型看成是支持某些方法的類。基本類型在概念上用.net結構表示。
eg:int i; string str = i.ToString();//這句中將int類型轉換為string類型沒有性能損失。
預定義值類型:
整型:在強調類型安全時,C#認為byte類型與char類型不同,必須顯示轉換;byte無符號,sbyte有符號;
預定義引用類型:
object類型:C#中的最終父類,所有內置類型以及用戶定義的類型都從它派生。
目的:(1).使用object引用綁定任何子類型的對象。eg:裝箱、反射;
(2).實現一般用途的基本方法,Equals(),GetHashCode(),GetType(),ToStrng().
string類型:string類型與引用類型的區別。字符串不可改變,修改其中一個字符串,就會創建一個全新的string對象,而另一個不會改變。
eg:
1 string str1 = "string1”; 2 string str2 = str1; 3 console.writeline("str1 is {0};str2 is {1}",str1,str2); 4 str1 = "new string1";//改變str1 的值,但此時str2並未改變 5 console.writeline("str1 is {0};str2 is {1}",str1,str2);
原因:運算符重載,這里重載了“=”(賦值)運算符。
轉義字符、@的使用。
於
2016年1月7日23:09:36