在物业上发射一个事件/功能?(C#)

Llo*_*ell 10 .net c# custom-event

我正在使用一个我无法编辑的类,它有一个属性(一个布尔值),当它发生变化时被告知是很好的,我无法编辑属性获取或设置,因为我从一个类导入类. DLL(我没有代码).

如何创建在更改属性时触发的事件/函数?

附加
它仅在其自己的类中更改,直接更改为基础私有变量.

例如

private bool m_MyValue = false;

public bool MyValue
  {
  get { return m_MyValue; }
  }

private void SomeFunction()
  {
  m_MyValue = true;
  }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 10

你不能,基本上......不是没有使用类似调试器API的东西在执行时注入代码并修改原始库的IL(我不推荐这些解决方案中的任何一个;除了它可能违反的任何其他内容图书馆的许可证).

基本上,如果属性不支持通知,则它不支持通知.您应该寻找一种不同的方法来解决您的问题.(举例来说,民意调查会有效吗?)


Rub*_*ink 5

你不能直接这样做[正如Jon Skeet所说],除非它是虚拟的,否则你可以拦截类的所有实例创建,并且对支持字段没有任何影响,这会影响propget的真正"价值".

暴力破解的唯一方法是使用Mono.Cecil或MS CCI 在Cecil上使用这个DimeCast来检测道具设置器.(或PostSharp)

但是,这不会捕获对支持字段的内部更改(如果有的话).(这就是包装可能不起作用的原因).

更新:鉴于您的更新,您肯定试图捕获基础字段更改,唯一的方法是使用PS/CCI/Cecil并分析流程以拦截所有字段更新.总之,不太可行.