2

TopMostと呼ばれるカスタムフォームのプロパティの変更を追跡したい(Form)。は使用できません。またはではないoverrideため、暗黙的に参照している間は効果がないため、キーワードを使用できません。TopMostabstractvirtualnew

そのようなタスクに対処するための最良の方法は何ですか?基本クラス( )に「change」イベントもONSomething仮想メソッドもオーバーライドせず、プロパティがまたはとしてマークされていないTopMost限り、代わりに任意のプロパティを置き換えることができます。Formabstractvirtual

例:

私はに基づいて多くのクラスを持っていますForm

MyForm1:Form, class MyForm2:Form, class MyForm_n:Form

一部の「ファクトリ」は、Formタイプのインスタンスを返します

Form f = GetMyForm();

そして最後に私はします

f.TopMost = !f.TopMost;

取り決めは、他のリターンタイプを実際に使用することはできないということですForm GetMyForm()interface実際のもの以外の基本クラスは使用できませんForm(実際、ファクトリはなく.ParentForm、何らかのコントロールのプロパティを使用しています)。

タスクを達成し、コードを可能な限りクリーンに保つための最良の方法は何ですか?前もって感謝します。

4

1 に答える 1

2

具象クラスとの間に新しい抽象クラスを導入したいと思うかもしれませんForm。それは、イベントObservedTopMostに委任するTopMostだけでなく、イベントを発生させるプロパティまたはそのようなものを持っている可能性があります。

これは、新しいプロパティが使用されている場合にのみ役立つことに注意してください。他の場所から既存のプロパティへの変更を魔法のように見つけることはありません。しかし、それはあなたの目的には十分かもしれません。

于 2012-11-01T17:42:40.627 に答える