2010-12-21 9 views
1

Ich habe die folgende Situation in den Händen. In dem Projekt, an dem ich arbeite, haben wir diese abstrakte Klasse A, die zwei Nachkommen hat, A_concrete1 und A_concrete2. Diese beiden waren schon einige Zeit da.Werkzeug zur Untersuchung möglicher Gießprobleme in C#

Die Zeit ist gekommen, um den dritten Nachkommen hinzuzufügen, A_concrete3. Das Problem ist, viel Zeit in den bestehenden Code-Basis finden Sie so etwas wie das:

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

So, jetzt, wenn A mehr als zwei Nachkommen hat, wird dieser Code offensichtlich gebrochen und wird zur Laufzeit fehlschlagen.

Meine Frage ist: Wie finde ich alle diese Situationen automatisch, damit ich sie beheben konnte? Was ist der beste Weg/Werkzeug um es zu tun? Ich habe versucht, Resharper zu verwenden, aber es liefert nichts für die Casting-Analyse. Ich würde mich freuen, einige Vorschläge und Hinweise zu diesem Thema zu hören.

Vielen Dank im Voraus

Antwort

2

Der beste Weg, es zu tun ist in A zu haben Methoden (das könnte in den Unterklassen überschrieben werden) und für jeden Code einer A gegeben, es zu benutzen nur Methoden von A zu nennen, und um es nie in irgendeine Unterklasse zu werfen. Auf diese Weise müssen Sie das nicht noch einmal machen.

Wahrscheinlich finden Sie in Dateien (die Symbolleiste Schaltfläche Funktionen Fernglas in einem Dateiordner) ist der beste Weg, (A_concrete2) und is A_concrete1 zu finden. Aber geh nicht einfach rein und ersetze das if durch ein paar ifs - ändere A, damit es eine angemessenere Basisklasse ist.

+0

Nun, Resharper zeigt mir alle Verwendungen von A_concrete 1 und 2, also keine Notwendigkeit für die Klartext-Suche. Dennoch würde ich gerne ein Werkzeug sehen, das auf diese möglicherweise schlechten Castings hinweist. – Dyppl

+0

Und sicher, ich weiß, dass das Casting für die konkrete Klasse die meiste Zeit schlecht ist, also plane ich, etwas auszuarbeiten, aber dafür muss ich wissen, welche Arten von Operationen Menschen mit diesen Objekten machen und wo sie diese ausführen. – Dyppl

Verwandte Themen