我有一堆模型,可能有也可能没有“CommonProperty”属性。我想在创建选定模型的新对象时设置该属性。我到目前为止,其工作原理是:动态创建模型对象时在模型中设置值
ModuleItem model = db.ModuleItems.Find(ModuleItemID);
object o = GetModuleType(model.ControllerName);
private object GetModuleType(string ModelName)
{
string projectName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
Type classtype = Type.GetType(string.Format("{0}.Models.{1}", projectName, ModelName));
PropertyInfo[] properties = classtype.GetProperties();
var classObject = classtype.GetConstructor(new Type[] { }).Invoke(null);
return classObject;
}
我想实现的是设置CommonProperty:
o.CommonProperty = DistinctValue;
我试图创建一个类,我所有的车型继承从一个虚拟的方法,每个模型然后有一个覆盖方法。因为它不是静态的,我不能直接调用它,如果我创建一个新的ModelBase,那么当调用方法时,它不会被对象“o”所在的类型覆盖。我看着创建一个接口,但1我甚至不知道这些如何工作,2(可能是因为1)我甚至无法创建一个没有生成错误的方法。
单步执行代码时,我可以使用quickwatch或智能感知或任何它所谓的任何方法查看“o”的所有属性。显然它被认为是正确的类型。虽然我似乎无法调用该方法,因为它仅在运行期间不会被识别(或设置)类型,因此我无法构建解决方案。
我不太明白。这不是什么“我尝试创建一个类,我的所有模型都使用虚拟方法继承,然后每个模型都有一个覆盖方法。”手段?如果不是,我如何创建一个可以控制其他模型的BaseModel? – 2012-04-03 21:59:49
我不这么认为。你应该只继承你需要属性CommpnProperty的BaseModel,例如如果你有两个类A和B,那么如果只需要A来让属性从BaseModel继承A,那么你可以同时拥有A和B一个列表,然后当你需要检查属性时,你可以应用上面的代码,它只会尝试设置A的属性,因为A是继承BaseModel的唯一类 – Jayanga 2012-04-04 04:21:04