如果使用VS 2012的朋友或許會疑問,VS 2012不是已經有即時分析程式錯誤和建議的功能?這邊有個比較表可參考看看。
安裝說明
- 下載:請至Resharper下載URL下載
- 安裝;下載後直接執行MSI檔,安裝程式會詢問要安裝在哪些Visual studio ,點"I Have read and ..",點Install就可以開始裝了。
- 安裝中畫面
- 安裝完成,在VS2012上面功能選項可以看到Resharp
基本操作說明
改善程式碼:安裝完Resharper後在程式碼檢視器右邊會有幾個顏色的bar,點那些bar就會跳到對應程式碼,在旁邊有個燈泡,點下去就會有建議:
紅色:明顯錯誤,這邊比VS 2012好的是可以批次修正
橘色:執行階段才會發生的錯誤,像有使用LINQ並使用了IEnumerable, IEnumerable
在 System.Collection.Generic命名空間有,System.Linq命名空間也有,應該要Using System.Linq才對
土色:去除不需要的code,沒用的using, 變數..
綠色:建議的較好寫法
都修正完,會有一個綠色方框在右邊Scroll bar頂端
重構
另外Resharper還有比Visual studio更強的Refactor功能,可先看Refactoring這本書後,再來使用比較有感覺。這邊舉一個例子,因為閱讀性要更改變數名稱,Resharp可以自動找到相關的變數,自動改變名稱,這可以大大減少人工錯誤。操作說明:
點兩下變數->Ctrl+Shift+R->就會出現Refactor視窗,選Rename進行更名
出現對話框,輸入要改成的名稱
增加生產力
以下說明一個快速產生程式的例子:- 我們新增一個console專案,新增一個項目"程式碼檔": test.cs,裡面是一片空白
- 接者我們輸入
using system; - 打n, 帶出namespace ,輸入resharpDemo
using System; namespace resharpDemo { }
- 接者打c,看到class,enter, 修改名稱為Program
- 然後Home, p, 選public, enter
using System; namespace resharpDemo { public class Program { } }
- Program裡打sv,選svm, enter
using System; namespace resharpDemo { public class Program { static void Main(string[] args) { } } }
- Main裡輸入
var p = new Person();
p.Name = "Anderson";
p.age = 12; - 會自動建立Person類別
using System; namespace resharpDemo { public class Program { static void Main(string[] args) { var p = new Person(); p.Name = "Anderson"; p.age = 12; } } internal class Person { } }
- 接者點Name,alt+enter,選Create property ‘Name’, enter
- 會在Class裡產生Property,別急著離開,上面有提示,接著按TAB,可以選Auto Property,只有Get/set的型式
internal class Person { public string Name { get; set; } public int age { get; set; } }
- 過來要自動產生建構子(Consructor),點類別Person,ALT+Ins , 帶出 Generate選單,選 Consructor
- 對話框,全選,Finish
internal class Person { public Person(string name, int age) { Name = name; this.age = age; } public string Name { get; set; } public int age { get; set; } }
- 再數次對Person,ALT+ENTER, 把equality member/Equality comparer/Formating member都執行過一次,就形成一個複雜的類別
internal class Person : IEquatable<Person> { private sealed class AgeNameEqualityComparer : IEqualityComparer<Person> { public bool Equals(Person x, Person y) { if (ReferenceEquals(x, y)) return true; if (ReferenceEquals(x, null)) return false; if (ReferenceEquals(y, null)) return false; if (x.GetType() != y.GetType()) return false; return x.age == y.age && string.Equals(x.Name, y.Name); } public int GetHashCode(Person obj) { unchecked { return (obj.age*397) ^ (obj.Name != null ? obj.Name.GetHashCode() : 0); } } } private static readonly IEqualityComparer<Person> AgeNameComparerInstance = new AgeNameEqualityComparer(); public static IEqualityComparer<Person> AgeNameComparer { get { return AgeNameComparerInstance; } } public bool Equals(Person other) { if (ReferenceEquals(null, other)) return false; if (ReferenceEquals(this, other)) return true; return age == other.age && string.Equals(Name, other.Name); } public override bool Equals(object obj) { if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; if (obj.GetType() != this.GetType()) return false; return Equals((Person) obj); } public override int GetHashCode() { unchecked { return (age*397) ^ (Name != null ? Name.GetHashCode() : 0); } } public static bool operator ==(Person left, Person right) { return Equals(left, right); } public static bool operator !=(Person left, Person right) { return !Equals(left, right); } public Person(string name, int age) { Name = name; this.age = age; } public string Name { get; set; } public int age { get; set; } public override string ToString() { return string.Format("Name: {0}", Name); } }
- 接者點Person類別,ALT+ENTER,選Create derived type
- 產生Employee類別後,增加變數typ型態為EmplyeeType,因為EmplyeeType不存在,為其建class
- 選Enum, 增加參數: PartTime, FullTime
- 點Employee,ALT+ENTER,點選Construtor,將type Em
- 產生後的 Code
class Employee : Person { public Employee(string name, int age, EmplyeeType type) : base(name, age) { this.type = type; } public EmplyeeType type { get; set; } } internal enum EmplyeeType { PartTime, FullTime }
常用的快速鍵
主要:
- Alt+ENTER: 點某東東,打開建議選單
- ALT+Ins:產生Code
- Ctrl-Shift-Space Smart Code Complete
- Ctrl-N Goto Type (same)
- Ctrl-F12 Goto file member (Alt-\ in VS bindings)
- Ctrl-U Goto Base (Alt-Home in VS bindings)
- Ctrl-Alt-B Goto Inheritor
Refactoring 重構:
- Ctrl-Shift-R Refactor 所點的東西!
- F2 Rename (Ctrl-R R)
- Ctrl-F6 Change Signature
- Extract Interface/Extract Baseclass via Ctrl-shift-R
文件說明/格式::
- Ctrl-P Parameter Information
- Ctrl-f Reformat Cod
Crtl+D可以直接複製游標那行到底下新建一行複製的內容,
回覆刪除也可以反白一個段落按Crtl+D可以直接複製貼上那個段落