0

私は、vb.netプログラミングの経験のかなり早い段階で、実際に作成する必要のある別のクラスから継承したクラスを作成しました。基本クラスは、比較的一般的なネストされた辞書ベースのコレクションです。子孫クラスを「車」と呼びましょう。

現在、「MyCar!Color.st = "Red"」のようなことを行うコードがたくさんあります(VB6で記述されたコードとのデータ交換を容易にし、車の比較を容易にするために、実際のプロパティではなく汎用コレクションを使用します。 3台の車X、Y、Zが与えられた場合、たとえばXとYの間の変更を検出し、それらの変更をZに適用できます。

継承ではなく構成を使用するようにコードをリファクタリングする良い方法はありますか?「Car」オブジェクトはどのプロパティ/メソッドをラップする必要があり、どのプロパティ/メソッドにデータオブジェクトプロパティを介してアクセスする必要がありますか?車とコレクションオブジェクトの間で拡大変換を定義する必要がありますか?このようなリファクタリングを行う際の落とし穴はありますか?

4

1 に答える 1

1

Car にはそのコレクションを取得するための関数 (またはメソッド。vb.net の用語がわからない) があると言って始めることができます。その関数は最初に返されますthis(またはselfvb が呼び出すものは何でも)。

Car.getCollection()ここで、Car クラス内と外部の両方で、Car-as-Collection へのすべての直接参照を に置き換えます。

最後に、変更を行います。メンバー変数を作成し、初期化し、から返しgetCollection()、Collection からの継承を停止します。手順 2 で参照を見逃した場合は、この時点でコンパイル エラーとして表示されます。それらを修正すると、リファクタリングが完了します。

于 2010-07-08T13:40:29.550 に答える