第一部分:C#入門
1,可以為類或者命名空間指定別名
例如(命名空間別名):using myAlias = myNameSpace1.myNameSpace2.Space3
2, C#的另外幾種開發工具:SharpDevelop / Snippet Compiler
C#返編譯軟體:.NET Reflector
C#單元測試工具:NUnit
C#代碼產生工具:CodeSmith
C#代碼標準偵查工具:FxCop
3, 編程風格建議
A,代碼塊之間空一行
B,左大括弧佔一行
C,括弧的嵌套層次要縮排(4個空格)
D,變數命名規則(就是名首字母小字,後面出現單詞的首字母大寫,如myData)
4, C#的四種數實值型別不被.net平台上其他語言支援,這四種數實值型別是(Sbyte,ushort,uint,ulong)
5, 資料類型顯式轉換的兩種方式:
A,System.Convert 類提供多種類型的資料相互轉換
B,括弧形式,如(int)
6,C#中全域變數的解決方案
用靜態類和靜態變數來實現,如:private static string name = "wang";
7, a++ 和 ++a的區別
a++ 先參與運算再自加 ++a 先自加再參與運算
8,^運算子號
用在兩個bool型運算中表示異或(只有一個運算元為 true 時,其結果才為 true)
用在兩個int型運算中表示二進位按位異或(5^6 = 101^110=011(3))
9, C#語言中資料類型檢測
檢測資料類型:int a=5; a is int 返回true
檢測類型的容量:sizeof(int);
10,C#中邏輯運算子
“&”表示“與”,兩者都為真結果才為真
“&&”表示“與”,與&不同的是它僅在必要時才計算第二個運算元
“|”表示“或”,兩者中有一方為真結果就為真
“||”表示“或”,與|不同的是它僅在必要時才計算第二個運算元
“^”表示“異或”,兩者中只有一方為真結果才為真
“!”表示“非”,參與變數取反
11,switch語句中的Case部分的內容為空白時,直接執行Case的下一個Case中的內容
12,switch語句支援對枚舉型的分支處理
13,三元運算子代替簡單的if else 語句
例如:
if (a>b)
{c=a-b }
else {c=a+b} 寫為 c = a>b?a-b:a+b
14,四種迴圈語句
A:for(){} 執行次數已知,可正向步進,逆向步進,步長不一定為1
B:foreach(){} 對集合實體進行遍曆操作
C: while(){};執行0次或0次以上,在迴圈體中改變迴圈判斷條件
D: do{} while(); 至少執行一次,在迴圈體中改變迴圈判斷條件
15,改變迴圈體執行的4種關鍵字:
A:goto 從迴圈體中跳到標籤位置,不建議從迴圈體外跳向迴圈體內
B: return 跳出當前過程,而不是迴圈體
C:break 跳出當前迴圈體(跳到當前迴圈體外聞)
D:continue 跳過當前迴圈體中的當次迴圈,進入下一次迴圈
16,關於冒泡排序演算法的一個經典例子
static void Main(string[] args)
{
int[] myArray = new int[5] { 12,9,35,68,51};
int a = 0;
for (int i = 0; i < myArray.Length; i++)
{
Console.WriteLine(myArray[i]);
}
Console.ReadLine();
//外層迴圈用來控制內層迴圈終值,因為每運行一次數組中的最大數會推動到數組最後
for (int i = myArray.Length - 1; i >= 0; i--)
{
for (int j = 0; j < i; j++) //內層迴圈用來比較相臨兩數,把大數向後推動
{
if (myArray[j] > myArray[j + 1])
{
a = myArray[j];
myArray[j] = myArray[j + 1];
myArray[j + 1] = a;
}
}
}
for (int i = 0; i < myArray.Length; i++)
{
Console.WriteLine(myArray[i]);
}
Console.ReadLine();
}
17,方法中的return意思是把控制權交給方法調用者,在方法上面一行使用///注釋可以自動產生關於方法的說明
,調用者使用此方法時,VS2005會顯示出這些注釋(智能提示功能)。
18,方法中傳入參數中ref的用法(使參數按引用傳遞,ref參數必須初始化)
19,方法中傳入參數中out的用法同ref,不同之處是out的傳入參數不用初始化
20,方法重載的三種形式
A:參數個數不同
B:參數類型不同
C:參數類型相同,但參數引用和非引用 也是重載(比如:static int add(ref int a,ref int b)
和 static int add(int a, int b))
21,System.Environment 此類擷取當前運行環境下的很多資訊.
------------------------------------------------------------------------------------
第二部分 C#提高
1,VS2005中類設計圖的使用(ClassDiagram)用圖形介面設計類,能自動產生類代碼
2,類的構成(類的成員):
A:建構函式(可重載)
B:解構函式(一個類只能有一個解構函式,並且不能被調用),當程度封閉視窗,檔案,網路連接這類非託管
資源
的時候,應當使用解構函式來釋放這些資源。
C:欄位(在類內部使用)
D:屬性,(用來擷取,修改類中欄位的值,用get set實現,get set)
E:方法。
3,類成員的存取控制修飾符(private(預設) public protected internal)
其中,protected 只能在類內部訪問和被它的衍生類別中訪問,介於private 和 public 之間
internal是類型和類型成員的存取修飾詞,用來限制類成員,以便只有在當前命名空間或程度集中的類可以訪問它
4,枚舉類型是輕量級的實值型別,用enum來聲明,枚舉用來表達一組特定值的集合行為,如windows表單的可選狀態等
5, 結構用struct來聲明,結構與類的區別:
A:結構是實值型別,在堆棧上分配地址。缺點是資源有限,不適合處理大的邏輯複雜物件,結構不支援繼承,但可
以實現介面。
B:類是參考型別,在堆上分配地址。
C:結構執行效率要比類高,但只適合小對象
6,注意多維陣列和交錯數組(數組的數組/鋸齒數組)的區別。
多維陣列:int[,] intArray = new int[2,2]{{10,11},{12,13}}
交錯數組(元素為數組的數組,維度和大小可以不同):寫法如下
int[][] intArray = new int[3]
int[0] = new int[]{10,20};
int[1] = new int[]{15,30,33};
int[2] = new int[]{15,22,25,29,65};
或者:
int[][] intArray = new int[][]
{
new int[] {10,20},
new int[] {15,30,33},
new int[] {15,22,25,29,65}
}
7, A:數組的遍曆foreach,
B:數組的清除System.Array(myArray,index,length),
C:數組的尋找Array.IndexOf(myArray, Object) 和4個參數的進階尋找縮小尋找範圍
D:數組的排序Array.Sort(myArray) 順序排序 / Array.Reverse(myArray) 注意此為反轉數組並不是倒
序
8, ArrayList ,同數組最大的區別是arrayList的容量是自動擴充的,
注意arraylist.capacity 顯示容量,arraylist.count顯示元素個數。
兩種增加元素的方式ADD,insert
三種刪除元素的方式clear,Remove,RemoveAt
ArrayList向Array的轉換
myArrayList.TrimToSize(),縮小capacity到當前實際容量,減少記憶體浪費.
9, HashTable 索引值對集合的字典,不能通過其index來訪問,只能通過key來訪問表中值,也就是hashTable[key]
作者: 58.33.87.* 2007-5-18 13:53 回複此發言
--------------------------------------------------------------------------------
3 C#2.0經典讀書筆記(第一二部分:C#入門和提高)
增加元素方式:add(key,value)
刪除元素方式: clear() / remove(key)
遍曆:foreach (DictionaryEntry d in h1)
尋找: HashTable.Contains / HashTable.ContainsKey 是否包含指定key的項
HashTable.ContainsValue 是否包含指定value的項
10,Queue 隊列類是先進先出集合
Queue的三個主要操作
Enqueue 將一個元素增加到Queue的尾部
Dequeue 從Queue的開始處取出最舊元素並移除此元素
Peek 從Queue處返回最舊元素但不刪除
11,Stock 堆棧類是後進先出集合
Stock的三個主要操作
Push 在Stock的頂部加入元素
Pop 從Stock頂部取出最新元素並移除此元素
Peek 從Stock頂部返回最新元素但不刪除
12,SortedList 是ArrayList 和 HashTable的結合體 ,當同時需要索引值對和順序索引時,使用SortedList
13,Dictionary字典類(泛型類)
14,Interface 介面(介面只定義有哪些功能,但不實現功能)
實現介面的成員不允許是靜態,非公用的
C#不允許類的多重繼承,允許一個類同時繼承類和介面
介面可以做為參數傳遞到方法中。介面可以做為傳回值
介面的實現分一般實現和顯式實現。顯式實現是為瞭解決如下問題:如果一個類繼承了兩個介面。兩個介面有一個相
同名稱的方法名,那麼出現名稱衝突,使用顯式介面可以解決這一問題.
15,abstract 抽象類別 (抽象類別類似介面,但允許方法的具體實現,是介面和普通類的結合體)
抽象類別中可以定義抽象方法,但抽象(屬性)不能具體實現,
抽象類別的衍生類別必須實現所有抽象成員。(用override來實現抽象成員)
16,sealed 密封類
密封類用來限制別的類從它繼承,不建議使用,除不能繼承外同普通類使用方法相同,用於:在類中包含有敏
感性資訊時可以考慮使用密封類.
17,進階轉換
A: is 用來檢查對象是否與指定類型相容
B:() 用來強制進行類型轉換
C:as用於在相容類型間轉換(與強制轉換相比,它在轉換失敗時不會引發異常)
18,virtual 和 override
Virtual用於修飾方法,屬性,索引器,事件聲明。要擴充或修改繼承的方法,屬性,索引器,事件聲
明的抽象實現或虛實現,必須使用override修飾符
19,類成員中的屬性和欄位:
屬性是對外部的,定義為public protected ,欄位是類內部的,只能private,體現類的封裝性
20,迭代器(.net2.0新知識)通過迭代器可以實現對類中資料結構的遍曆,定義方法如下
public System.Collections.IEnumerator GetEnumerator(){}
21,部分類別(.net2.0新知識)可以將類,結構,介面的定義分拆到多個源檔案中,每個源檔案包含類的一部分,分
部類用partial定義.如windows表單應用程式中form1.cs 和 form1.designer.cs 就是兩個檔案中使用了分部
類.
使用部分類別的注意事項:
A:單一類不要使用部分類別定義關鍵字:partial, .net會去尋找另外一部分,增加系統負擔
B: 各部分類別的可訪問性應一致
C:各部分類別應都使用partial關鍵字來定義
D: 各部分類別繼承了不同的類和介面時,.net 會很好的將其結合起來
E: partial關鍵字應出現在class,interface,struct 之前一位置。
22,索引器 :為類提供與數組相似的方式進行索引,跟屬性相似。索引器也可以用在結構和介面中,如果在介面
中定義了空索引器,實現該介面的類必須實現它的介面的索引器.
23, 泛型(.net2.0新知識)