C#基礎
1、棧存地址和值類型,堆存對象數據。
2、var,編譯器類型推斷
3、不能用從變量中提取出來的值來初始化常量,如果需要這么做,應使用只讀字段;
4、常量總是隱式靜態的,const關鍵字:
1)使用易讀取名稱,便於閱讀;
2)便於程序(業務)邏輯變更,比如稅率SalesTax=6%;
3)避免程序犯錯,如別處賦值則編譯器報錯。
5、C#數據存儲:值類型存儲在堆棧(Stack)中,而引用類型存儲在托管堆(Managed Heap)中。CLR會做內存管理,調用垃圾回收期實現內存回收。
6、C#有15個預定義類型,其中兩個引用類型(string 和 object),13個是值類型。
1)C#中的int 聲明的實際上是.Net 結構System.Int32的一個實例,看起來很深奧,但其意義深遠:這表示在語法上,可以把所有的基本數據類型看成支持某些方法的類。例如:int i=10;string s=i.ToString();
2)C#的decimal類型不是基本類型,計算時使用該類型會有性能損失。28位(128位的高精度十進制數表示法)decimal d=12.30M;或者decimal d=12.30m.
3)C# bool=true 或false:如果試圖用0表示false,非0表示true,就會報錯。
4)Byte(無符號)、sbyte(有符號),標准8位類型,
5)字符類型:char 表示一個16位的Unicode字符
7、Object類: 是C#和.net的根類型:例如堆棧中的值類型對象通過object裝箱到堆中.實現了一些基本方法,可以重寫,如Equals()、GetHashCode(),GetType()和ToString().
8、C# string實際上是.Net 類System.String,是個引用類型。但又會體現值類型的字符串一般和直觀的字符串規則特點,是通過運算符重載實現的。如:string s1="a string"; string s2=s1;s1="Another string";結果:s1="Another string" s2="a string"
9、字符串:通過@字符消除轉義字符“\”,$字符串插值功能
10、使用if語句的一個重要指導原則就是:
1)只有語句和if語句寫在同一行時,才允許程序員不適用花括號。遵循之,程序員在添加第二個語句時不太可能不添加花括號。
2)比較好的習慣:都要加花括號,無論幾行邏輯語句。(如果沒有else。。。)
3)值比較== 常值置於前 if(0==j)
11、Switch語句:可以包含一條default語句。任何兩條case都不能相同,否則編譯器報錯:break可用
const string england="uk";
const string britain="uk";
switch(country)
{
case england:
case britain://編譯會報錯
language="English";
break;
}
12、循環for, while ,do...while,foreach(不能改變集合中各項的值,否則不能編譯,如改變應使用for循環),break、Continue 可用
但這樣是可以的:
foreach (var item in resultList)
{
Apple a = item as Apple;
if (a != null)
{ a.Color = "Red"; }
}
13、return
14、枚舉:是用戶定義的整數類型,枚舉實例是一組易於記憶的整數值。C#中,枚舉的真正強大之處是它們在后台實例化為派生自基類System.Enum的結構。一旦代碼編譯好,枚舉就成為基本類型,與int類似。
1)可以檢索枚舉的字符串表示:
public enum TimeOfDay
{
Morning = 0,
Afternoon =1,
Evening =2
}
TimeOfDay time=TimeOfDay.Evening ;TimeOfDay time2=(TimeOfDay)Enum.Parse(typeof(),TimeOfDay,"afternoon ",true);
15、名稱空間 namespace,可以嵌套,using,別名 using alias=NamespaceName;
16、使用注釋:源文件的內部注釋:單行// ,多行/*...*/
17、XML文檔 根據特定注釋自動創建XML格式的文檔說明
18、C#預處理器指令