vs2005常用快速鍵
調試快速鍵
F6: 產生解決方案
Ctrl+F6: 產生當前項目
F7: 查看代碼
Shift+F7: 查看表單設計器
F5: 啟動調試
Ctrl+F5: 開始執行(不調試)
Shift+F5: 停止調試
Ctrl+Shift+F5: 重啟調試
F9: 切換斷點
Ctrl+F9: 啟用/停止斷點
Ctrl+Shift+F9: 刪除全部斷點
F10: 逐過程
Ctrl+F10: 運行到游標處
F11: 逐語句
編輯快速鍵
Shift+Alt+Enter: 切換全屏編輯
Ctrl+B,T / Ctrl+K,K: 切換書籤開關
Ctrl+B,N / Ctrl+K,N: 移動到下一書籤
Ctrl+B,P: 移動到上一書籤
Ctrl+B,C: 清除全部標籤
Ctrl+I: 累加搜尋
Ctrl+Shift+I: 反向累加搜尋
Ctrl+F: 尋找
Ctrl+Shift+F: 在檔案中尋找
F3: 尋找下一個
Shift+F3: 尋找上一個
Ctrl+H: 替換
Ctrl+Shift+H: 在檔案中替換
Alt+F12: 尋找符號(列出所有尋找結果)
Ctrl+Shift+V: 剪貼簿迴圈
Ctrl+左右方向鍵: 一次可以移動一個單詞
Ctrl+上下方向鍵: 滾動代碼螢幕,但不移動游標位置。
Ctrl+Shift+L: 刪除當前行
Ctrl+M,M: 隱藏或展開當前嵌套的摺疊狀態
Ctrl+M,L: 將所有過程設定為相同的隱藏或展開狀態
Ctrl+M,P: 停止大綱顯示
Ctrl+E,S: 查看空白
Ctrl+E,W: 自動換行
Ctrl+G: 轉到指定行
Shift+Alt+方向鍵: 選取矩形文本
Alt+滑鼠左按鈕: 選取矩形文本
Ctrl+Shift+U: 全部變為大寫
Ctrl+U: 全部變為小寫
代碼快速鍵
Ctrl+J / Ctrl+K,L: 列出成員
Ctrl+Shift+空格鍵 / Ctrl+K,P: 參數資訊
Ctrl+K,I: 快速資訊
Ctrl+E,C / Ctrl+K,C: 注釋選定內容
Ctrl+E,U / Ctrl+K,U: 取消選定注釋內容
Ctrl+K,M: 產生方法存根
Ctrl+K,X: 插入程式碼片段
Ctrl+K,S: 插入外側代碼
F12: 轉到所調用過程或變數的定義
視窗快速鍵
Ctrl+W,W: 瀏覽器視窗
Ctrl+W,S: 解決方案管理器
Ctrl+W,C: 類別檢視
Ctrl+W,E: 錯誤清單
Ctrl+W,O: 輸出視圖
Ctrl+W,P: 屬性視窗
Ctrl+W,T: 工作清單
Ctrl+W,X: 工具箱
Ctrl+W,B: 書籤視窗
Ctrl+W,U: 文檔大綱
Ctrl+D,B: 斷點視窗
Ctrl+D,I: 即時視窗
Ctrl+Tab: 活動表單切換
Ctrl+Shift+N: 建立項目
Ctrl+Shift+O: 開啟項目
Ctrl+Shift+S: 全部儲存
Shift+Alt+C: 建立類
Ctrl+Shift+A: 建立項
3、 變數.ToString()
字元型轉換 轉為字串
12345.ToString("n"); //產生 12,345.00
12345.ToString("C"); //產生 ¥12,345.00
12345.ToString("e"); //產生 1.234500e+004
12345.ToString("f4"); //產生 12345.0000
12345.ToString("x"); //產生 3039 (16進位)
12345.ToString("p"); //產生 1,234,500.00%
1.9 取中文日期顯示——年月日時分
string strY=currentTime.ToString("f"); //不顯示秒
1.10 取中文日期顯示_年月
string strYM=currentTime.ToString("y");
1.11 取中文日期顯示_月日
string strMD=currentTime.ToString("m");
1.12 取中文年月日
string strYMD=currentTime.ToString("D");
1.13 取當前時分,格式為:14:24
string strT=currentTime.ToString("t");
1.14 取目前時間,格式為:2003-09-23T14:46:48
string strT=currentTime.ToString("s");
1.15 取目前時間,格式為:2003-09-23 14:48:30Z
string strT=currentTime.ToString("u");
1.16 取目前時間,格式為:2003-09-23 14:48
string strT=currentTime.ToString("g");
1.17 取目前時間,格式為:Tue, 23 Sep 2003 14:52:40 GMT
string strT=currentTime.ToString("r");
1.18獲得目前時間 n 天后的日期時間
DateTime newDay = DateTime.Now.AddDays(100);
字串變數.Replace("子字串","替換為")
字串替換
如:
string str="中國";
str=str.Replace("國","央"); //將國字換為央字
Response.Write(str); //輸出結果為“中央”
C#編程規範
養成良好的編碼風格是極其必要的,誰也不願意看到一堆雜亂無章的代碼,將來你或者別人在維護的時候是多麼的痛苦,所以,從現在開始,養成良好的編碼習慣,包括變數命名,注釋,代碼縮排....。
1 .利用Pascal的方式定義類型、方法名和常量
public class SomeClass { const int DefaultSize=100; public SomeMethod() { } }
|
2.對於局部變數和方法的參數使用駱駝命名法
int number; void MyMethod(int someNumber) {}
|
3.介面的名稱前加上I
interface ImyInterface {…}
|
4.在私人成員變數前面加上m_。對於m_後面的變數名使用駱駝命名方法
public class SomeClass { private int m_Number; }
|
5.對自訂的屬性類加上尾碼Attribute
6.對自訂的異常類加上尾碼Exception
7.方法的命名使用動詞----對象對,例如ShowDialog()
8.有傳回值的方法的命名中要有傳回值的描述,例如GetObjectState()
9.使用帶有說明性的變數名
a) 避免單字元的變數名,例如I或t等。使用類似於index或temp這樣有意義的名字。
b) 對於public或protected類型的變數避免使用匈牙利標記法。
c) 不要縮寫單詞(例如用num取代number)。
10.總是使用C#預定義而不要使用System名稱空間中的別名,例如:
使用object而不是Object
使用string而不是String
使用int而不是int32
11.在使用泛型的時候,類型的首字母要大寫。當處理.NET中的Type類型的時候,保留Type尾碼。(C#2.0新特性)
//正確 public class LinkedList<K,T> {…}
//避免 public class LinkedList<KeyType,DataType> {….}
|
12.使用有意義的名字定義名稱空間,例如產品名或者公司名
13.避免通過全限定方式使用類型名稱,使用using關鍵字。
14.避免在一個名稱空間中使用using關鍵字
15.把所有系統架構提供的名稱空間組織到一起,把第三方提供的名稱空間放到系統名稱空間的下面
using System; using System.Collection.Generic; using System.ComponentModel; using System.Data; using MyCompany; using MyControls;
|
16.使用代理推導而不要顯式的執行個體化一個化代理(C#2.0新特性)
delegate void SomeDelegate(); public void SomeMethod() {…} SomeDelegate someDelegate=SomeMethod;
|
17.維護嚴格的代碼縮排。不要使用tabs或非標準的縮排,例如一個空格。推薦的縮排是3到4個空格。
18.在和你的代碼縮排處於同一個層級處為該行代碼添加註釋。
19.所有的注釋都應該通過拼字檢查。注釋中的錯誤拼字意味著開發進度的延緩。
20.所有的類成員變數應該被聲明在類的頂部,並用一個空行把它們和方法以及屬性的聲明區分開
public class MyClass { int m_Number; string m_Name; public void SomeMethod1(); public void SomeMethod2(); }
|
21.在最靠近一個局部變數被使用的地方聲明該局部變數。
22.一個檔案名稱應該能夠反映它所對應的類名
23.當使用一個部分類並把該類分布到不同的檔案中時,在每一個檔案名稱末尾都加上該檔案實現的部分在類整體中扮演的作用。例如:
// In MyClass.cs public partial class MyClass {…} //In MyClass.Designer.cs public partial class MyClass {…}
|
24.總是要把花括弧“{”放在新的一行
編碼實踐:
1. 避免在同一個檔案中放置多個類
2. 一個檔案應該只向在一個名稱空間內定義類型。避免在一個檔案中使用多個名稱空間
3. 避免在一個檔案內寫多於500行的代碼(機器自動產生的程式碼除外)
4. 避免寫超過25行代碼的方法
5. 避免寫超過5個參數的方法。如果要傳遞多個參數,使用結構。
6. 一行不要超過80個字元
7. 不要手動去修改任何機器產生的程式碼
a) 如果修改了機器產生的程式碼,修改你的編碼方式來適應這個編碼通訊協定
b) 儘可能使用partial classes特性,以提高可維護性。(C#2.0新特性)
8. 避免對那些很直觀的內容作注釋。代碼本身應該能夠解釋其本身的含義。由可讀的變數名和方法名構成的優質代碼應該不需要注釋。
9. 注釋應該只說明操作的一些前提假設、演算法的內部資訊等內容。
10. 避免對方法進行注釋
a) 使用充足的外部文檔對API進行說明
b) 只有對那些其他開發人員的提示資訊才有必要放到方法級的注釋中來
11. 除了0和1,絕對不要對數值進行寫入程式碼,通過聲明一個常量來代替該數值
12. 只對那些亙古不變的數值使用const關鍵字,例如一周的天數。
13. 避免對唯讀(read-only)的變數使用const關鍵字。在這種情況下,直接使用readonly關鍵字
public class MyClass { public const int DaysInWeek=7; pubic readonly int Number; public MyClass(int someValue) { Number=someValue; } }
|
14. 對每一個假設進行斷言。平均起來,每5行應有一個斷言。
using System.Diagnostics; object GetObject() {…} object someObject=GetObject(); Debug.assert(someObject!=null);
|
15. 每一行代碼都應該以白盒測試的方式進行審讀。
16. 只捕捉那些你自己能夠顯式處理的異常。
17. 如果在catch語句塊中需要拋出異常,則只拋出該catch所捕捉到的異常(或基於該異常而建立的其他異常),這樣可以維護原始錯誤所在的堆棧位置。
catch(Exception exception) { MessageBox.Show(exception.Message); throw;//或throw exception; }
|
18. 避免利用傳回值作為函數的錯誤碼。
19. 避免自訂異常類。
20. 當自訂異常類的時候:
a) 讓你自訂的異常類從Exception類繼承
b) 提供自訂的序列化機制
21. 避免在一個程式集中(assembly)中定義多個Main()方法。
22. 只把那些絕對需要的方法定義成public,而其它的方法定義成internal。
23. 避免friend assemblies,因為這會增加程式集之間的耦合性。
24. 避免讓你的代碼依賴於運行在某個特定地方的程式集。
25. 在application assembly(EXE client assemblies)中最小化代碼量。使用類庫來包含商務邏輯。
26. 避免顯式指定枚舉的值
//正確 public enum Color { Red,Green,Blue }
//避免 public enum Color { Red=1,Green=2,Blue=3 }
|
27. 避免為枚舉指定一個類型
//避免 public enum Color:long { Red,Green,Blue }
|
28. 對於if語句,總使用一對{}把下面的語句塊包含起來,哪怕只有一條語句也是如此。
29. 避免使用三元條件操作符。
30. 避免利用函數返回的Boolean值作為條件陳述式。把傳回值賦給一個局部變數,然後再檢測。
Bool IsEverythingOK() {…}
//避免 if(IsEverythingOk()) {…}
//正確 bool ok=IsEverythingOK(); if (ok) {…}
|
31. 總是使用以零為基數的數組。
32. 總是使用一個for迴圈顯式的初始化一個引用成員的數組:
public class MyClass {} const int ArraySize=100; MyClass[] array=new MyClass[ArraySize]; For (int index=0;index<array.Length;index++) { array[index]=new MyClass(); }
|
33. 使用屬性來替代public或protected類型的成員變數。
34. 不要使用繼承下來的new操作符,使用override關鍵字覆寫new的實現。
35. 在一個非密封(non-sealed)類中,總是把那些public和protected的方法定義成virtual。
36. 除非為了和其它語言進行互動,否則絕不要使用不安(unsafe)的代碼。
37. 避免顯示類型轉換。使用as關鍵字安全的轉換到另一個類型。
Dog dog=new GermanShepherd(); GermanShepherd shepherd=dog as GermanShepherd; if (shepherd!=null) {…}
|
38. 在調用一個代理前,總是檢查它是否為null。
39. 不要提供public的事件成員變數。改用Event Accessor。
Public class MyPublisher { MyDelegate m_SomeEvent; Public event MyDelegate SomeEvent { add { m_SomeEvent+=value; } remove { m_SomeEvent-=value; } } }
|
40. 避免定義事件處理代理。使用EventHandler<T>或者GenericEventHandler。
41. 避免顯示觸發事件。使用EventsHelper安全的發布事件。
42. 總是使用介面。
43. 介面和類中方法和屬性的比應該在2:1左右。
44. 避免只有一個成員的介面。
45. 努力保證一個介面有3~5個成員。
46. 不要讓一個介面中成員的數量超過20,而12則是更為實際的限制。
47. 避免在介面中包含事件。
48. 當使用抽象類別的時候,提供一個介面。
49. 在類繼承結構中暴露介面。
50. 推薦使用明確介面實作。
51. 從來不要假設一個類型支援某個介面。在使用前總是要詢問一下。
SomeType obj1; ImyInterface obj2; /*Some code to initialize obj1,then:*/ obj2=obj1 as ImyInterface; if(obj2!=null) { obj2.Method1(); } else { //Handle erro in expected interface }
|
52. 不要寫入程式碼向使用者顯示的字串。要使用資源。
53. 不要寫入程式碼那些可能會隨發布環境變化而變化的字串,例如資料庫連接字串。
54. 使用String.Empty取代””
//避免 string name=””; //正確 string name=String.Empty;
|
55. 使用一個長字串的時候,使用StringBuilder代替string。
56. 避免在結構中提供方法
a) 參數化的建構函式是鼓勵使用的
b) 可以重載運行符
57. 當聲明了表態成員的時候,總是要提供一個表態建構函式。
58. 當早綁定(early-binding)可能的時候就盡量不要使用遲綁定(late-binding)。
59. 讓你的應用程式支援跟蹤和日誌。
60. 除了要在switch語句塊中實現代碼跳轉,不要使用goto關鍵字。
61. 總在switch語句的default情形提供一個斷言。
int number=SomeMethod(); swith(number) { case 1: trace.WriteLine(“Case 1:”) break; case 2: trace.Writeline(“Case 2:”); break; default: debug.Assert(false); break; }
|
62. 除了在一個建構函式中調用其它的建構函式之外,不要使用this關鍵字。
//Example of proper use of ‘this’ public class MyClass { public MyClass(string message) { } public MyClass():this(“Hello”) { } }
|
63. 不要使用base關鍵字訪問基類的成員,除非你在調用一個基類建構函式的時候要決議一個子類的名稱衝突
//Example of proper use of ‘base’ public class Dog { public Dog(string name) { } virtual public void Bark(int howlong) { } } public class GermanShepherd:Dog { public GermanShepherd(string name):base(name) { } override public void Bark(int howLong) { base.Bark(howLong) } }
|
64. 不要使用GC.AddMemoryPressure()
65. 不要依賴HandleCollector
66. 基於《Programming .NET components》2/e中第四章的內容實現Disponse()和Finalize()方法。
67. 總是在unchecked狀態下運行代碼(出於效能的原因),但是為了防止溢出或下溢操作,要果斷地使用checked模式。
Int CalcPower(int number,int power) { int result=1; for (int count=1;count<=power;count++) { checked { result*=number; } } return result; }
|
68. 使用條件方法來取代顯式進行方法調用排除的代碼(#if…#endif)
public class MyClass { [Conditional(“MySpecialCondition”)] public void MyMethod() {} }
|
69. 不要在泛型介面中定義約束。介面級的約束通常可以利用強型別來替代。
Public class Customer {} //避免: public interface Ilist<T> where T:Customer {}
//正確: public interface IcustomerList:Ilist<Customer>
|
70. 不要在介面上定義方法相關的約束。
71. 不要在代理上定義約束。
72. 如果一個類或方法提供了泛型和非泛型版本,那麼優先選擇泛型版本