我有一个小问题,需要一些帮助:)
例如,我有一个简单的抽象类。
"和其他基类"
"第一个通用抽象类"
"和初步实现"
抱歉类名不好,但我无法创建更好的(这只是一个示例)。正如我们所看到的,现在一切都很好:)。
我有一些方法返回泛型实现的IEnumerable。
现在我必须创建一个方法,可以接受IEnumerable中的通用对象。
我记得
没错,你无法创建一个
我可以通过反射获取这些字段的值,但是我有抽象类和接口,所以我认为有更好的方法。
例如,我有一个简单的抽象类。
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>
的列表。有人对这个问题有什么想法吗?我可以通过反射获取这些字段的值,但是我有抽象类和接口,所以我认为有更好的方法。