C# 类型需要特定类的子类以及接口



我正在开发一个实用程序,该实用程序将具有"过滤器"的接口,其中包含该接口的许多实现。接口的一部分将返回一个 Control 类型的对象,该对象将在 UI 中用于操作筛选器。

我希望能够要求返回的控件也实现另一个接口,以便我可以执行诸如请求控件写回创建它们的对象之类的操作。

现在我的代码看起来像:

public interface IFilter
{
    Control Control();
}

我想要这样的东西:

public interface IFilterControl
{
    ...
}
public class FilterControl : Control, IFilterControl{}
public interface IFilter
{
    ...
    FilterControl Control();
}

上述方法不起作用,因为 FilterControl 实际上并没有实现 IFilterControl。

如果以上内容不够清楚,请尝试想象虚构的关键字"implmenting"在下面如何工作

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;

可能想看看使用泛型。它们将允许您对类型进行约束。

public interface IFilter<T> where T : Control
{
    T Control { get; set; }
    T ControlMethod();
}

where 子句是一般约束,要求 T 始终为控制类型。它也适用于接口。这样,您就会知道这些方法或属性始终是 Control 的衍生物,并且这些期望将显示在智能感知中。

编辑哦,我刚刚想到,如果您愿意,您可以仅在该方法上应用泛型。

interface IFilter
{
    T Control<T>() where T : Control;
}

最新更新