私はSystem.Reflection.Emitに新しく、私のライブラリーからnuget PropertChanged.Fodyを削除しようとしています。 これは私が得たものです。 このメソッドはUpdateProperty buと呼ばれます。本当に線量がPropertyInfoをオーバーライドしているので、PropertyInfoが仮想でない場合、このコードは機能しません。 新しいPropertyを作成せずにPropertyInfo Setのみを更新することは可能ですか?System.Reflection.example.fmit propertyInfoにコードを追加します
private static void UpdateProperty(PropertyInfo propertyInfo, TypeBuilder typeBuilder,
MethodInfo raisePropertyChangedMethod)
{
// Update the setter of the class, here is the problem im creating new PropertyInfo
PropertyBuilder propertyBuilder = typeBuilder.DefineProperty(propertyInfo.Name,
PropertyAttributes.None, propertyInfo.PropertyType, null);
// Create set method
MethodBuilder builder = typeBuilder.DefineMethod("set_" + propertyInfo.Name, MethodAttributes.Public | MethodAttributes.Virtual , null, new Type[] { propertyInfo.PropertyType });
builder.DefineParameter(1, ParameterAttributes.None, "value");
ILGenerator generator = builder.GetILGenerator();
// Add IL code for set method
generator.Emit(OpCodes.Nop);
generator.Emit(OpCodes.Ldarg_0);
generator.Emit(OpCodes.Ldarg_1);
generator.Emit(OpCodes.Call, propertyInfo.GetSetMethod());
// Call property changed for object
generator.Emit(OpCodes.Nop);
generator.Emit(OpCodes.Ldarg_0);
generator.Emit(OpCodes.Ldstr, propertyInfo.Name);
generator.Emit(OpCodes.Callvirt, raisePropertyChangedMethod);
generator.Emit(OpCodes.Nop);
generator.Emit(OpCodes.Ret);
propertyBuilder.SetSetMethod(builder);
}
私はあなたが何を意味するか見ることができますが、propertyInfoの設定者はsealdであり、これらのリンクが機能するとは思っていません。私はこのようなものが好きです。var user =()を取得しました。ユーザーは新しいアッシーで新しいタイプを作成せずにこれらの変更を実装しました。 rihjt今Mono.Cecilとその良いを見ていますが、それはサポートしていません.netコア2 creazyです –