C#中是否可要求对象实现多个接口成员,无需显式继承组合接口?
如何限定绑定属性传入的类型同时实现多个接口,无需显式继承自定义组合接口
问题描述
我正在开发一款类似ItemsControl的自定义控件,其包含可绑定的Items属性,为了让控件能够正常更新,该属性对应的绑定对象需要实现INotifyCollectionChanged接口。我希望用户可以绑定任意同时实现INotifyCollectionChanged和IList接口的对象。
我最初考虑的方案是定义一个组合接口,要求用户的自定义集合继承该接口:
public interface INotifyCollectionChangedAndList : INotifyCollectionChanged, IList { }
但该方案存在明显缺陷:官方标准库的ObservableCollection<T>虽然同时实现了INotifyCollectionChanged和IList两个接口,但并没有继承我自定义的INotifyCollectionChangedAndList接口,我也无权修改官方类的实现。同理,用户使用的第三方库中符合两个接口要求但不受自己控制的类型,也无法正常绑定。
请问是否有方法(包括反射等技术方案)可以限定传入的类型必须满足多个接口的所有要求,不需要该类型显式声明继承自定义的组合接口?
结论
该问题的答案是没有。可参考@benjamin的回答,该方案虽对控件开发者来说不是最优解,但在其他场景下是最接近预期实现效果的方案。
内容的提问来源于stack exchange,提问作者Michael Wagner
相关产品推荐
相关产品推荐

