現在,我正在研究ASP.NET MVC 2.我剛剛發現了一些有關從Model項目中的基類派生的View Model類的嚴重問題。每當我從數據庫獲取數據時,我都必須將其轉換爲View Model實例,而這在大多數OOP語言中是不可能的。在C#4.0中,基類實例派生類實例的最佳方式是什麼?
基類
public class MyBaseClass
{
public string ID { get;set; }
public string Value { get;set; }
}
派生類
public class MyDerivedClass : MyBaseClass, ISomeInterface
{
// logic for My Derived Class
}
不過,我試圖創造一些方法,從基類的實例複製所有可讀屬性等衍生類的實例下面的代碼。
public static TDerived CastObject<TBase, TDerived>(TBase baseObj)
{
Type baseType = typeof(TBase);
Type derivedType = typeof(TDerived);
if (!baseType.IsAssignableFrom(derivedType))
{
throw new Exception("TBase must be a parent of TDerived.");
}
TDerived derivedObj = Activator.CreateInstance<TDerived>();
foreach (PropertyInfo pi in baseType.GetProperties())
{
if (pi.CanRead)
{
PropertyInfo derivedProperty = derivedType.GetProperty(pi.Name);
if (derivedProperty.CanWrite)
{
derivedProperty.SetValue(derivedObj, pi.GetValue(baseObj, null), null);
}
}
}
return derivedObj;
}
但我不知道上面的代碼,將工作在大型網站的偉大,也有在C#4.0 DLR,我不知道很多功能。
你對使用C#4.0轉換項目有任何想法嗎?
感謝,
您可能會解釋爲什麼要將所有值複製到派生類? – Bobby 2009-12-30 08:52:44
因爲我有其他代碼檢查實例類型是否有一些接口,我不能修改基類,因爲它是生成的代碼的一部分。 – 2009-12-30 11:08:17