2010-12-21 14 views
1

我手上有以下情況。在我工作的項目中,我們有這個抽象類A,它有兩個後代,A_concrete1A_concrete2。這兩個人現在已經有一段時間了。用於檢查C#中潛在鑄造問題的工具

現在是添加第三個後代A_concrete3的時候了。問題是,很多現有的代碼庫時,你會發現這樣的事情:

A instance; 
// ... 
// assignment of instance 
// ... 
if (!(A is A_concrete1)) 
    A_concrete2 = (A_concrete2)A; 

所以現在,當一個有兩個以上的後代,這個代碼顯然打破,會在運行時失敗。

我的問題是:我如何自動找到所有這些情況,以便我可以修復它們?什麼是最好的方式/工具來做到這一點?我試圖使用Resharper,但它沒有提供任何用於投射分析的東西。所以我很樂意聽到這方面的一些建議和指針。

在此先感謝

回答

2

來做到這一點是有一個方法(可能在子類中重寫)和給定的一個任意代碼只用它來調用的方法的最佳途徑,永遠不會將它投射到任何一個子類。那樣你就不用再做這個了。

可能在文件中查找(工具欄按鈕在文件夾上使用雙筒望遠鏡)是找到(A_concrete2)is A_concrete1的最佳方法。但是,不要僅僅進入那裏,而是用一堆ifs取代if - 改變A,這是更合適的基類。

+0

好吧,Resharper會告訴我A_concrete 1和2的所有用法,所以不需要明文搜索。儘管如此,我還是希望看到一個能夠指出這些可能不好的鑄件的工具 – Dyppl 2010-12-21 11:44:30

+0

當然,我知道在大多數情況下鑄造到具體課程是很糟糕的,所以我打算解決一些問題,但爲此我需要知道人們用這些物體做什麼類型的操作以及它們在哪裏做。 – Dyppl 2010-12-21 11:47:10