ReSharper配置及用法
1:安裝後,resharper會用他自己的英文智慧提示,替換掉 vs2010的智慧提示,所以我們要換回到vs2010的智慧提示
2:快捷鍵。是使用vs2010的快捷鍵還是使用 resharper的快捷鍵呢?我是使用re的快捷鍵
3:
esharper安裝後,會做幾件事情,這幾件事情對於除此使用者,比較麻煩,因此歸納總結一下,以資參考。
(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提供的重構包括瞭如下:
- 封裝欄位
- 提取方法
- 提取介面
- 提升區域性變數
- 移除引數
- 重新命名
- 重新排列引數
這些方法在resharper中全部都支援(但resharper的重構遠不止這些),它們對應的變成了:
- 封裝欄位 —— introduce field
- 提取方法 —— extract method
- 提取介面 —— extract interface (另增加了extract superclass提取為基類)
- 提升區域性變數 —— introduce variable
- 移除引數 —— 移到change signature(改變方法簽名)中
- 重新命名 —— rename (resharper會根據物件的型別名稱,提供你幾個可選的最合適的名稱)
- 重新排列引數 —— 移到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、重新命名:
游標位置上的(對方法重新命名會彈出對話方塊),你只需要用方向鍵選擇並敲回車即可,這種名字多是將型別的名字首字母改為小寫得來的,甚至刨根到基類的型別名,你還可以在此基礎上加以改進。如果你還在用i,j這種晦澀的名稱,請迅速的把他們改為outindex, pointcount之類可讀的名稱。
為什麼重新命名值得挑出來講,因為resharper提供了命名建議這一金子般的功能。於是,想改名為易讀性強的名字,不是那麼費腦子的事情了。resharper會根據這個變數的型別,為你提供幾個備選名字,名字列表是列在
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的效能問題,我想,一個可能的原因是開啟的文件太多了,如果你有時刻關閉不需要的文件的習慣,效能