WPF アプリケーションを作成していますが、継承で問題が発生しました。GUIクラスとデータクラスをリンクするというクラスがあります
。
GUI またはデータ部分は将来変更される可能性があるため、コードは開いたままにしておく必要があります。そのため、実際の GUI/データ クラスへのインターフェイスまたは抽象クラス参照を使用します。 DataHandler
DataHandler
たとえば、SelectionFrame
と を使用する必要がSetSelection()
あり、両方のメソッドを持つインターフェイスGetSelection()
を作成しました。ISelectionGUI
そしてそれをSelectionFrame
実装します。
public interface ISelectionGUI
{
void SetSelection(HashSet<String> fields);
void GetSelection(HashSet<String> fields);
}
public partial class SelectionFrame : Window, ISelectionGUI
{
[...]
}
DataHandler
クラスでは、次のようになります。
ISelectionGUI sF = new SelectionFrame();
しかし、これを行っている間、次のWindow
ようにキャストする場合を除いて、メソッドを使用できません。
((Window)sF).Show();
次の開発者に拡張を強制するものは何もないため、これは最善の解決策ではないようですWindow
。また、必要なメソッドを
拡張して備えた抽象クラスを使用しようとしました。そのクラスを拡張し、xamlを変更しました(これに続いて): Window
SelectionFrame
<base:ISelectionGUI x:Class="WFChecker.SelectionFrame"
[...]
xmlns:base="clr-namespace:WFChecker"
[...]
</base:ISelectionGUI>
しかし、VisualStudio ではデザイナーで抽象クラスを使用できないため、うまくいきませんでした。Window
私の質問は、メソッドにアクセスしながら、クラスを実装したり、抽象クラスを拡張したりするフレームを作成するにはどうすればよいですか?