1. 程式人生 > >ReSharper 配置及用法

ReSharper 配置及用法

青菜 精神 發展 發出 方便 str ace 搜索 微軟

1:安裝後,Resharper會用他自己的英文智能提示,替換掉 vs2010的智能提示,所以我們要換回到vs2010的智能提示

技術分享

2:快捷鍵。是使用vs2010的快捷鍵還是使用 Resharper的快捷鍵呢?我是使用re的快捷鍵

技術分享

3:

Resharper安裝後,會做幾件事情,這幾件事情對於除此使用者,比較麻煩,因此歸納總結一下,以資參考。

(1)、會將選項——文本編輯器——C#——常規——自動列出成員 這個選擇框的勾選去掉。這樣當你使用某個方法的時候,便不會提示參數,是一個很郁悶的事情。

可以手動勾上。

(2)、會將選項——文本編輯器——C#——高級——顯示實時語義錯誤、在編輯中用下劃線標識錯誤這兩個選項去掉。這個本來沒有什麽,但是如果卸載了Resharper,

vs編輯器變不會實時提示錯誤。因此卸載Resharper後,需要把這兩個選項重新勾選上。

4: use var

use implicitly typed local variable declaration

技術分享

5:按 alt+enter 能解決很多問題。下面是快捷鍵大全。

技術分享

6: Alt+F7將你光標所在位置的變量的所有使用以列表的方式顯示出來,顯示結果的窗體可以像其他窗體那樣停靠。

它的優點包括:

  • 可以從所有使用中挑選只顯示read usage或者write usage,有時我們只是想知道某個變量在哪裏被改變了。找到的位置前的圖標也告訴你這點。
  • 可以在下方預覽,即使我們列出所有使用,也不想跳轉到每個使用它的地方,這時預覽可以幫你大忙。
  • 當你在代碼編輯器中改動了某些使用時,比如刪除了某行,那麽在查找結果的窗體中,會用刪除線表示出來。
  • 默認的是尋找解決方案中所有的使用,並且按照命名空間來組織,非常便於選擇。

我現在已經記不起來在沒有Alt+F7之前我是怎麽查找的。反正現在我幾乎不怎麽樣Ctrl+F了,除非我忘記了某個變量的名字。如果是這樣,多半這個名字需要refactor,那也是Resharper的另一大塊功能所在。也許有人對這個功能嗤之以鼻,但是用過CAB的人都知道,訂閱和發布某個事件的簽名,完全是字符串,如果你不用搜索來找到它的話,你都不知道這個控件的鼠標點下去,到底有多少個處理程序在背後開始工作了。用了Alt+F7來搜索這個字符串,等於在查找背後所有的調用者。

不過提示你,當光標停留在一個類型上時,要慎用Alt+F7,假設是一個string,你應該能想象到得找到多少個使用

7:威力無比的Alt+Enter回車

萬能的Alt+Enter能夠幫你完成很多編寫代碼過程中的dirty work,總結起來大概是這麽些:

  • 幫你實現某個接口或抽象基類的方法;
  • 提供你處理當前警告的一些建議;
  • 為你提供處理當前錯誤的一些建議(不一定是真的錯誤);
  • 為你簡化當前的臃腫代碼;

8: Ctrl + F11 當我們看別人的代碼,或者是看自己的代碼的時候,總是覺得代碼太多,於是我們就用 region來把代碼進行了封裝註釋,可是這樣之後別人看代碼就很郁悶,Resharper的 File Structure 功能,就可以把region和你的方法都展示出來。

說了這麽多,其實就是把對象瀏覽器和region的長處結合起來,既可以清晰的分類,又能一目了然的找到需要的方法。Resharper這時幫上你的大忙了。用Ctrl+F11,就彈出一個像右邊這樣的窗口來。

這裏面,按照你的region來顯示,這樣讀你的代碼的人也受益了。每個方法的參數,返回值都如UML一樣列出來。

  • 如果需要瀏覽到某個方法,直接雙擊它的名字;
  • 如果要把某幾個方法裝進一個新的region,則可以選中方法,點工具欄上的像框的那個圖標;點叉則會刪除這個region並把相應的方法移到外面來。
  • 如果要調整某個方法的位置,比如把它移到別的region裏面去,只需要在這裏拖動這個方法即可。
  • 更可喜的是,你想要的從這裏瀏覽、找到所有使用和重構的功能也在這裏提供了,在某個方法上右鍵你就能開始操作。

技術分享

9:重構才是王道(上)

重構是一種精神,證明你在致力於提供高效的、精煉的、健壯的代碼,而不是淩亂的、晦澀的、漏洞百出的代碼。
在Visual Studio 2005中,微軟第一次提供了重構工具。但是不夠,遠遠不夠。我們需要的重構是非常廣義的,我們想要對代碼進行快速的調整,快到我在想什麽我的工具就能做什麽。這才是追求重構的境界。所以在這個意義上,幾乎Resharper為你提供了巨大的生產力。
Visual Studio 2005提供的重構包括了如下:

  1. 封裝字段
  2. 提取方法
  3. 提取接口
  4. 提升局部變量
  5. 移除參數
  6. 重命名
  7. 重新排列參數

這些方法在Resharper中全部都支持(但Resharper的重構遠不止這些),它們對應的變成了:

  1. 封裝字段 —— Introduce Field
  2. 提取方法 —— Extract Method
  3. 提取接口 —— Extract Interface (另增加了Extract Superclass提取為基類)
  4. 提升局部變量 —— Introduce Variable
  5. 移除參數 —— 移到Change Signature(改變方法簽名)中
  6. 重命名 —— Rename (Resharper會根據對象的類型名稱,提供你幾個可選的最合適的名稱)
  7. 重新排列參數 —— 移到Change Signature(改變方法簽名)中

我知道很多人都聲稱自己E文不好,但是,這確實都是很簡單的單詞,難不倒任何人的。這些重構的功能是人所共知的,下面就告訴大家一些Resharper特有的,首先,重構的快捷鍵是Ctrl+Shift+R:
1、對於類,除了提取接口、基類,你還可以移動它到其他的命名空間和移動到別的文件裏,這是一個實用的功能,也許你不信,但是我這真的有個人,把所有的business entity都寫在一個DataObject.cs裏面。你難以想象,我打開它時嘴張了多大。
2、對於字段,提供了:

  • Safe Delete,會檢測所有使用到的地方,並詢問如何刪除;
  • Pull Member Up和Push Member Down,可以把這個字段在基類和繼承類中移動;
  • Use base type where possible,盡可能的使用基類,由於ArcGIS平臺是基於com組件的,很多時候我們需要的是IGeometry, IPointCollection這樣的接口所公開的屬性或者方法,於是你沒有必要保存一個polygon對象,而可以使用基類型;
  • Encapsulate Field,封裝字段,但是這個功能遠沒有另一個提供同樣功能的操作有用。我可以在後文中來講。

3、對於方法,提供了:

  • 與字段類似的功能,此外;
  • Change Signature,更改函數簽名,包括更改名稱,返回值類型,參數的各種信息,添加和刪除參數,相當實用。如果你是在重寫方法上操作,會提示你是否到基類中更改。
  • Make Static,如果Resharper檢測到這個方法並沒有與非靜態成員相關聯的話,往往會自動地提示你(以黃色橫杠的形式出現)可以改為static,如果你自作主張的對一些方法進行修改也無不妥,但後果自負。
  • Extract class from parameter,如果你的參數有七個八個,那是否考慮用一個類來封裝這些參數呢,於是這個功能應運而生。
  • Method to Property,顧名思義,如果還在使用GetField()或者SetField(..)的話,你一定是從非.net星來的。

4、在方法體內部:
Extract Method,不用介紹了吧。
Introduce Variable/Parameter/Field,取決於你光標所在的對象,可以提供轉化的功能。
Inline Variable:就是把:

IPoint point = new PointClass();
point.PutCoords(_point.X, _point.Y);

變成這樣子:

new PointClass().PutCoords(_point.X, _point.Y); //這是個糟糕的例子

5、重命名:
為什麽重命名值得挑出來講,因為Resharper提供了命名建議這一金子般的功能。於是,想改名為易讀性強的名字,不是那麽費腦子的事情了。Resharper會根據這個變量的類型,為你提供幾個備選名字,名字列表是列在光標位置上的(對方法重命名會彈出對話框),你只需要用方向鍵選擇並敲回車即可,這種名字多是將類型的名字首字母改為小寫得來的,甚至刨根到基類的類型名,你還可以在此基礎上加以改進。如果你還在用i,j這種晦澀的名稱,請迅速的把他們改為outIndex, pointCount之類可讀的名稱。
Resharper其實提供了更先進的功能,在你命名一個變量時,就有快捷鍵為你提供備選名字,但是Ctrl+Space是我們寶貴的輸入法切換鍵,於是,我對變量名的敲定,往往是先起了一個較爛的,然後重命名的。
還有一些更廣義上的,幫助你對代碼進行調整的功能,我另寫一篇吧,不然太長了。

重構才是王道(下)

插入代碼
Resharper的Alt+Insert快捷鍵提供給你插入代碼的功能。由於這兩個鍵非常難按(這是我的感受),真正在使用的時候,我用的是Alt-R-C-G,意指打開Resharper菜單——Code——Generate,都只需要你的左手,這樣你可以右手一邊比劃,一邊還在寫代碼,多酷啊。

  • 生成的代碼中最常用的是構造函數和屬性,當你沒有私有字段的時候,只會生成一個空的默認構造函數,而且沒有生成屬性的功能。在你有私有字段的情況下,生成之前會讓你選擇哪些私有字段需要作為構造函數的參數,並生成初始化的代碼,這樣編寫重載極其方便。生成屬性也類似。
  • 再次常用的就是重寫基類或者接口的方法了。選擇Implement Interface Member或者Override Inheritate Member,Resharper會查找當前類的基類或接口,然後按繼承層次列出來,根據你的選擇重寫或實現這些方法。
  • 不是太常用的是生成Equals和GetHashCode方法,在我的應用場景中很少重寫它們。但是根據《.NET設計規範》,不管是值類型還是引用類型的Equals都建議重寫,並且應該重寫GetHaseCode方法,因為它們相互依賴。如果你有這個需求,那麽生成這三個函數一定能夠幫你的大忙。

包圍代碼
Visual Studio也提供了外側代碼這個功能,你可以按Ctrl+K,Ctrl+S來激活這個功能,雖然我並沒有任何鄙視Visual Studio的意思,但是Resharper的快捷鍵確實更加合理(我在按下Ctrl的時候真的很難按下S),條目也更加清晰。Resharper中這個功能的快捷鍵是Ctrl+Alt+J,然後你就可以選擇將當前行的代碼包圍到try-catch塊或者using中了。這是很高效的方法,我們傾向於在開發的早期盡量不捕獲異常,而在中後期才加入異常處理機制。於是你某一個時期有大量的工作是把他們擴到try-catch塊中。而你要使用支持dispose對象時,最好的方法是使用using塊。(賣蛋糕的,當我知道我的代碼不是最優的時候,我總是寢食難安),這裏自然也有把代碼擴到region塊中的功能,也是常用功能之一。
調整方法的位置
前面我曾說過,如果要調整方法的位置,可以在代碼結構窗口中拖放操作。如果你覺得只是把一個方法移動到前面去,卻不得不打開代碼結構窗口太過重量級,那麽有輕量級的方法:當光標位於方法的名稱上時,用Ctrl+Shift+上下鍵就可以移動方法的位置,包括方法的xml註釋,但如果你用的不是三個/的xml註釋而是兩個/的,那麽就對不起了。
其他瑣碎的功能
你肯定常常會復制粘貼當前行的代碼,例如在使用StringBuilder.Append的時候,Ctrl+D可以簡化你Ctrl+C,Ctrl+V的工作。
曾經有一個組合鍵可以註釋掉當前行,還有另一個是取消註釋,但是我已經淡忘了,因為Ctrl+/才應該是真正屬於它的快捷鍵,再次按下就可以取消註釋。
關於Resharper的重構功能就是這些,我可能天真地把很多額外功能都算在重構裏了,但是它確實能夠幫助你快速的對代碼進行調整和優化。所以,請不要深究我對重構的概念認識是不是混亂。

增強的瀏覽功能

瀏覽參數的方式
輸入方法的時候,我們已經習慣了由IDE提供給我們的參數提示,極大了方便了我們選擇重載方法。在沒有Resharper的環境下,Visual Studio已經做到了。那麽為什麽Resharper還要增強這個功能並大獲好評的。試問,Visual Studio那窄窄的一行參數提示有沒有讓你覺得憋屈。我們有19寸的大屏幕,1600的分辨率,卻不得不盯著那窄條條,小心翼翼的按著上下鍵尋找我們需要的重載。至少,開發Resharper的家夥是受不了這種憋屈的,於是大開大闔版的參數列表出現了,長長的參數重載被以列表的形式展現出來,當你在使用GDT+方法,看到巨大的參數重載時,你會從心底裏發出感嘆:賣蛋糕的。
同時,Resharper展示參數的快捷鍵變成了Ctrl+P,如果你覺得屏蔽了打印的快捷鍵簡直是在開玩笑的話,那麽問問你自己有多少次打印過自己的代碼。
瀏覽打開過的文檔
我竊以為你已經知道了在Visual Studio中切換文檔的方式,它們包括:
Ctrl+Alt+上下方向鍵,可以在打開的文檔中切換;
Ctrl+Tab,不僅可以在文檔之前切換,並可以切換到解決方案文件夾,屬性視圖去,需要按左右鍵。
但是怎麽樣打開最近編輯後關閉的文件呢,Visual Studio很客氣的又沒有提供此功能,於是留給了Resharper。在我這裏這個快捷鍵是Ctrl+E,Ctrl+E,沒錯,按兩次。如果你的不是,那麽在Resharper-View-Recent Files菜單下看看它是什麽。因為你會時常用到。打開一個文件的列表,用方向鍵選擇並回車就會在編輯器中打開。
很多人說Resharper的性能問題,我想,一個可能的原因是打開的文檔太多了,如果你有時刻關閉不需要的文檔的習慣,性能或許不會那麽差,並且你可以隨時打開這些你關閉了的文檔,就像在已經打開的文檔中切換一樣的方便。
我的團隊中沒有用到敏捷開發那些高級的東西,但是我們還是保持著每次改動都僅涉及兩三個文件的好習慣,並且頻繁的commite到源代碼服務器上去。所以,我每次真正要編輯的文件不多,性能不是問題。
和大家分享了很多Resharper使用的技巧,點點滴滴都已經融入我日常的開發工作中了。當然很不全面,例如與Nunit的集成,由於我們不是測試驅動,所以沒有任何體驗,自然也不敢大放厥詞;也很主觀,我覺得它好,你可能覺得它不好,蘿蔔青菜各有所愛。再說,它也不是沒有白癡的地方,在文檔上點右鍵增加的一個Close All功能,可以關閉所有打開的文檔,關閉了幹什麽,對著一個空白的屏幕發呆麽?我覺得原生的“除此之外全部關閉”就夠了。還有一個定位的功能(Locate in Solution Explorer),真是沒用,如果你在VS選項中設置了,在解決方案管理器中跟蹤活動項,那麽VS自動就給你定位了。
不管怎麽說,它帶給我更快更方便的開發體驗,把我從一些瑣碎的,不人性化的功能中解放出來。從這一點上來說,我很希望越來越多的人喜歡上它,開始用它,並幫助它更好的發展。

原文地址:http://www.cnblogs.com/ShaYeBlog/p/3554253.html

ReSharper 配置及用法