我有一堆模型,可能有也可能沒有「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