【问题标题】:Is it possible, to evaluate the event of calling a set property?是否可以评估调用 set 属性的事件?
【发布时间】:2014-12-04 23:20:13
【问题描述】:

假设我们有一个普通的 C# 类,它有一个自动获取/设置属性。

public class Entity
{
       public String SomeProperty {get;set;}

}

当调用 SomeProperty 的 set 方法时,是否有任何事件引发并且我可以评估?

这样的事情是否可能以任何方式,也许是反射?:

伪代码,没有真实代码:

Entity e = new Entity();
e.SomeProperty.SetterCalled += OnSetterCalled;

private void OnSetterCalled(Sender propertyinfo)
{
    propertyinfo pi = propertyinfo;
    Console.Write (pi.Name);
}

我知道,我可以使用 CallerMember,但是我不得不更改 auto 属性。

【问题讨论】:

  • 您可以添加实际的 getter/setter 方法。每次访问属性时都会调用它们 - 这正是它们的设计目的。
  • 我能想到几个非常糟糕、难以实施的方法。但说实在的呢?不。几乎可以保证 setter 被优化为对字段的简单写入,即使没有,也没有内置机制可以让您捕获方法调用。如果您需要通知,请通过此类事件的许多常用技术之一来实现它。
  • @Ken White:您能否提供一个提示或 URL,我可以在其中找到相关信息?是否可以使用自动实现的 get/set 属性?

标签: c# propertyinfo propertychanged callermembername


【解决方案1】:

不,没有办法做到这一点。

setter 就是这样:

_backingVariable = value;

赋值本身并不调用任何方法。就目前而言,没有办法在使用自动属性的属性集期间引发事件。

您可以在编译时使用类似以下技术的方法更改代码:https://stackoverflow.com/a/18002490/1783619

但除此之外,没有办法做到这一点。

【讨论】:

    【解决方案2】:

    我建议调查一下:

    INotifyPropertyChanged
    

    这是一个很棒的演练:

    Implementing INotifyPropertyChanged - does a better way exist?

    【讨论】:

    • 目前,这是最好的提示/答案,因为链接中提供的解决方案似乎是最干净的方式。
    猜你喜欢
    • 2014-05-28
    • 2018-06-13
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 2013-01-01
    • 1970-01-01
    相关资源
    最近更新 更多