私は、そのインターフェースの多くの実装を備えた「フィルター」のインターフェースを持つユーティリティに取り組んでいます。インターフェイスの一部は、フィルターを操作するために UI で使用される Control 型のオブジェクトを返します。
コントロールがそれらを作成したオブジェクトに書き戻すように要求するなどのことができるように、返されたコントロールにも別のインターフェイスを実装することを要求できるようにしたいと考えています。
今私のコードは次のようになります:
public interface IFilter
{
Control Control();
}
次のようなものが欲しいです:
public interface IFilterControl
{
...
}
public class FilterControl : Control, IFilterControl{}
public interface IFilter
{
...
FilterControl Control();
}
FilterControl は実際には IFilterControl を実装していないため、上記は機能しません。
上記が十分に明確でない場合は、架空のキーワード「実装」がどのように機能するかを以下で視覚化してみてください
public interface IFilterControl
{
IFilter Filter{get;}
}
public interface IFilter
{
Control implmenting IFilterControl Control();
}
public interface FilterImpl : IFilter
{
Control implmenting IFilterControl Control(){
return new FilterControlImpl(this);
}
}
public partial class FilterImplControl : UserControl, IFilterControl
{
FilterImpl filter;
public FilterImplControl(FilterImpl filter)
{
this.filter = filter;
}
public IFilter Filter{get{return filter;}}
}
FilterImpl a_filter = GetAFilter();
Control implmenting IFilterControl ctl = a_filter;
panel.Controls.Add(ctl);
FilterImpl the_filter_indirectly = ctl.Filter;