4
我有一个豆蔻的问题,我需要一些帮助:)通用对象
,比如我有一个笑着抽象类
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;}
}
对不起类的名字,但我不能创造更好的东西(这是唯一的例子) 正如我们看到的,现在一切OK了:)。
我有一些方法谁返回通用实现的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,所以我尽量让这个
public interface IBaseParentClass<out T> where T : BaseDefinition
{
IList<T> Objects {get;set;}
}
是啊,你不能做的<out T>
列表。有人对这个问题有任何想法吗?
我可以通过反射得到这个字段值,但我有抽象类和接口,所以我认为是一个更好的方法。
http://ideone.com/提供了一个随时可用的编译器。 – millimoose 2012-01-08 21:21:50
工程很棒。这很简单,我问自己我怎么想不出通用的方法:0 谢谢:) – user1091406 2012-01-08 21:29:23
@Inerdial很好! – flq 2012-01-08 21:58:29