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

ReSharper配置及用法

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

3](1[keco85fi{jz@te$nke

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

_]ba}4y457w2e0t%{a73pk5

3:

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

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

可以手動勾上。

(2)、會將選項——文字編輯器——c#——高階——顯示實時語義錯誤、在編輯中用下劃線標識錯誤這兩個選項去掉。這個本來沒有什麼,但是如果解除安裝了resharper,

vs編輯器變不會實時提示錯誤。因此解除安裝resharper後,需要把這兩個選項重新勾選上。

4: use  var

use implicitly typed local variable declaration

image

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裡面去,只需要在這裡拖動這個方法即可。
  • 更可喜的是,你想要的從這裡瀏覽、找到所有使用和重構的功能也在這裡提供了,在某個方法上右鍵你就能開始操作。

image

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的效能問題,我想,一個可能的原因是開啟的文件太多了,如果你有時刻關閉不需要的文件的習慣,效能