我有以下表示分层数据结构的接口,因此名称为IHierachicalItempublic interface IHierachicalItem{ IHierachicalItem Parent { get; set; } IList<IHierachicalItem> Children { get; set; }}现在,我有多个从该接口继承的类:public class HierachicalItemA : IHierachicalItem{ public IHierachicalItem Parent { get; set; } public IList<IHierachicalItem> Children { get; set; }}public class HierachicalItemB : IHierachicalItem{ public IHierachicalItem Parent { get; set; } public IList<IHierachicalItem> Children { get; set; }}public class HierachicalItemC : IHierachicalItem{ public IHierachicalItem Parent { get; set; } public IList<IHierachicalItem> Children { get; set; }}我想扩展接口,以便类在访问其parent和children属性时返回相同的类而不是接口。所以我考虑使用通用接口:public interface IHierachicalItem<T> : IHierachicalItem{ new T Parent { get; set; } new IList<T> Children { get; set; }}现在,我面临的问题是,我只想拥有一个Children实例,而不要调用.OfType.ToList()之类的东西。我该如何实现?public class HierachicalItemB : IHierachicalItem<HierachicalItemB>{ IHierachicalItem IHierachicalItem.Parent { get { return this.Parent as IHierachicalItem; } set { this.Parent = (HierachicalItemB)value; } } IList<IHierachicalItem> IHierachicalItem.Children { get { return this.Children.OfType<IHierachicalItem>().ToList(); } set { this.Children = value.OfType<HierachicalItemB>().ToList(); } } public HierachicalItemB Parent { get; set; } public IList<HierachicalItemB> Children { get; set; }}我也可以使用.Cast 代替.OfType ,但这不会改变以下事实:我必须调用.ToList(),或者如果接口会一次又一次说出它的ObersavbleCollection并初始化一个新的ObservableCollection , 有任何想法吗? 最佳答案 你不能您的IHierachicalItem界面需要具有签名IList<IHierachicalItem> Children的属性,而IHierachicalItem<T>则需要IList<T> Children。您需要同时实现这两个属性。您的其他财产也是如此。这就是为什么您需要隐式接口实现来告诉编译器您同时遵守两个接口的原因。除了删除一个接口之外,没有其他方法可以解决此问题。注意:我认为您T应该限制为IHierachicalItem<T>类型:public interface IHierachicalItem<T> : IHierachicalItem where T : IHierachicalItem关于c# - 通用和非通用接口(interface)-T列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31518019/
10-13 07:24