c# – 与接口列表的接口
发布时间:2020-12-15 19:30:29 所属栏目:百科 来源:网络整理
导读:也许我很笨,但…… 我有: public interface IRequest{ IListIRequestDetail Details { get; set; } // stuff}public interface IRequestDetail{ // stuff} 然后我有: public class MyRequest : IRequest{ IListMyRequestDetail Details {get; set; } // st
也许我很笨,但……
我有: public interface IRequest { IList<IRequestDetail> Details { get; set; } // stuff } public interface IRequestDetail { // stuff } 然后我有: public class MyRequest : IRequest { IList<MyRequestDetail> Details {get; set; } // stuff } public class MyRequestDetail : IRequestDetail { // stuff } 它不起作用. C#对我很生气,因为MyRequest由于没有IRequestDetail的IList而没有实现接口. 现在,如果我更改它以便细节是IRequestDetail的IList,那么我必须将它转换为MyRequestDetail代码中的任何地方我使用非接口成员(我有几个请求共享常见的东西,但然后专门化). 我有点理解为什么它错了,但并不完全! 解决方法
我认为,基于问题是您希望将详细信息视为通用列表并强制实施IRequestDetail的问题.您还希望为实现类更具体地键入它.在这种情况下,您需要使IRequest通用.
试试这个: public interface IRequest<T> where T : IRequestDetail { IList<T> Details { get; set; } // stuff } public class MyRequest : IRequest<MyRequestDetail> { public IList<MyRequestDetail> Details {get; set; } // stuff } 这应该适合你. 编辑2017-03-17 在回复@ Robert的评论时,请参阅下面的扩展代码: public interface IRequestDetail { } public class MyRequestDetail : IRequestDetail { } public interface IRequest<T> where T : IRequestDetail { IList<T> Details { get; set; } // stuff } public class MyRequest<T> : IRequest<T> where T : IRequestDetail { public IList<T> Details { get; set; } // stuff } public class Consumer { public void MyFunction<T>(IRequest<T> request) where T : IRequestDetail { } public void Foo() { var test = new MyRequest<MyRequestDetail>(); MyFunction(test); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |