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