0
我需要在運行時創建具有屬性的類型。 類型必須是這個樣子:在運行時生成類型
public class RunTimeType : BaseType
{
private string _field1;
public string Property1
{
get { return _field1; }
set
{
if (_field1 != value)
{
_field1 = value;
OnAfterPropertySet("Property1");
}
}
}
}
的問題是如何創造Set方法?現在我用如下因素代碼:
var propertyName = "Property1";
var onAfterPropertySet = baseType.GetMethod("OnAfterPropertySet",
BindingFlags.Instance | BindingFlags.InvokeMethod |
BindingFlags.NonPublic, null, new[] { typeof(string) },
null);
ILGenerator currSetIL = currSetPropMthdBldr.GetILGenerator();
currSetIL.Emit(OpCodes.Ldarg_0);
currSetIL.Emit(OpCodes.Ldarg_1);
currSetIL.Emit(OpCodes.Stfld, field);
currSetIL.Emit(OpCodes.Ldstr, propertyName);
currSetIL.Emit(OpCodes.Call, onAfterPropertySet);
currSetIL.Emit(OpCodes.Pop);
currSetIL.Emit(OpCodes.Ret);
但是當我試圖值設置爲屬性,異常呼籲onAfterPropertySet
爲this
參數之前拋出
什麼你想完成?生成IL很少是最好的解決方案。 – SLaks 2010-11-08 21:33:34
你會得到什麼例外? – SLaks 2010-11-08 21:34:13
我得到TargetInvocationException – Timur 2010-11-08 21:36:44