现在,我正在研究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