プロパティ「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"が上書きされることはありません。私はインターフェイスの作成を見ていましたが、私はこれらの仕組みがわからず、2(おそらく1のために)私はビルドエラーなしでこれを行う方法さえも作成できませんでした。
コードをステップ実行すると、クイックウォッチまたはインテリセンスを使用して「o」のすべてのプロパティが表示されます。明らかに、正しいタイプとして認識されています。ランタイム中にしかビルド中に認識されない(またはセットされた)タイプではないので、メソッドを呼び出すことができないようです。そのため、ソリューションをビルドできません。それは私が結局のところCommonPropertyは、モデルがタイプBaseModelであるかどうかを確認することは、その後
if (obj is BaseModel)
{
obj.CommonProperty = DistinctValue;
}
私は本当に理解していません。それは私がすべてのモデルが仮想メソッドから継承し、各モデルがオーバーライドメソッドを持っているクラスを作成しようとしたことではありませんか?手段?そうでない場合、他のモデルを制御できるBaseModelを作成するにはどうすればよいですか? –
私はそうは思わない。たとえば、2つのクラスAとBを持っている場合は、CommpnPropertyプロパティが必要なBaseModelのみを継承する必要があります.AをBaseModelから継承する必要がある場合は、AとBの両方を1つのリストでは、プロパティをチェックする必要があるときに、AがBaseModelを継承する唯一のクラスであるため、Aのプロパティを設定しようとする上記のコードを適用することができます – Jayanga