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