c#中的通用对象
发布时间:2020-12-15 17:22:56 所属栏目:百科 来源:网络整理
导读:我有一个小问题,我需要一些帮助:) 例如,我有一个simle抽象类 public abstract class BaseDefinition{ public int Id { get;set; } public string Name { get;set; }} 和其他基类 public abstract class BaseParentClass{ public string Name { get;set; } pu
我有一个小问题,我需要一些帮助:)
例如,我有一个simle抽象类 public abstract class BaseDefinition { public int Id { get;set; } public string Name { get;set; } } 和其他基类 public abstract class BaseParentClass { public string Name { get;set; } public string Schema { get;set; } } 和第一个通用抽象类 public abstrac class BaseParentClass<T> : BaseParentClass where T : BaseDefinition { public IList<T> Objects {get;set;} } 和第一次实施 public class ClassADefintion : BaseDefinition { public bool IsChanged {get;set;} } public class ClassAObject : BaseParentClass<ClassADefinition> { public bool OtherField {get;set;} } public class ClassBDefintion : BaseDefinition { public bool IsBBBChanged {get;set;} } public class ClassBObject : BaseParentClass<ClassBDefinition> { public bool OtherBBBBField {get;set;} } 对于班级名称感到抱歉,但我无法创造更好的东西(这是唯一的例子) 我有一些方法返回IEnumerable泛型实现 IEnumerable<ClassBObject> ClassBObjectCollection; IEnumerable<ClassAObject> ClassAObjectCollection; 现在我必须创建一个方法,可以在IEnumerable中获取通用对象 public void DoWork(IEnumerable<BaseParentClass<BaseDefinition>> objects) { foreach(var baSEObj in objects) { foreach(var baseDef in baSEObj.Objects) { // do some work } } } 我多么记得BaSEObject< BaseDefinition> != ClassAObject,但编译器不会在屏幕上显示任何错误.我记得在通用接口的.NET中我们可以使用IN和OUT T,所以我尝试制作它 public interface IBaseParentClass<out T> where T : BaseDefinition { IList<T> Objects {get;set;} } 是的,你不能列出< out T>.有人对这个问题有任何想法吗? 我可以通过反射得到这个字段值,但我有抽象类和接口,所以我认为是一种更好的方法. 解决方法
我手头没有编译器,但我认为应该可以重写DoWork:
public void DoWork<T>(IEnumerable<BaSEObject<T>> objects) where T : BaseDefinition { foreach(var baSEObj in objects) { foreach(var baseDef in baSEObj.Objects) { // do some work } } } 我不确定编译器是否能够为你推断T,试一试. 另一种可能性是,如果你无论如何枚举那些对象,要制作IEnumerable类型的对象(Of T). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |