1
我正在研究一个实用程序,该实用程序将具有用于“过滤器”的接口以及该接口的多个实现。接口的一部分将返回一个类型为Control的对象,该对象将在UI中用于操作过滤器。需要具体类的子类以及接口的C#类型
我希望能够要求返回的控件也实现另一个接口,以便我可以执行诸如请求控件回写到创建它们的对象之类的事情。
现在我的代码如下所示:
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;
这是个好主意,@JacobProffit。实际上,您可以在类和接口上约束T(http://msdn.microsoft.com/zh-cn/library/ms379564(v=vs.80).aspx#csharp_generics_topic4)。 – SirPentor
对。带约束的泛型非常棒。 :) –
我不清楚在这种情况下,带有IFilter实例集合的类如何在不知道T的情况下调用Control()。你能扩展这个例子吗? – tletnes