40

您知道如何拥有一个自动生成支持字段的属性吗?就像我去:

public String SomeProperty {get; set;}

我知道,如果我想向该属性添加代码,我必须这样创建支持字段:

 public string someProperty = string.Empty;
 public string SomeProperty
 {
     get { return someProperty; }
     set
     {
         someProperty = value;
         DoSomething();
     }
 }

基本上,我想知道的是......有没有办法做到这一点,但不必创建支持字段?例如,我可以使用它来触发设置属性时发生的某种事件。我正在寻找这样的东西:

 public string SomeProperty
 {
     get;
     set { this.OnSomeEvent; }
 }

但我知道这会导致编译错误,因为get如果需要,确实需要声明一个主体set

我已经研究过,我找不到任何东西,但我想我会检查一下是否有人知道。

我想我真正追求的是某种方式来在属性更改时触发事件,但不必添加所有额外的混乱。有什么建议么?

4

2 回答 2

27

简单的答案是否定的,你不能同时拥有它。来自.NET 文档

在 C# 3.0 及更高版本中,当属性访问器中不需要额外的逻辑时,自动实现的属性使属性声明更加简洁。

于 2013-07-24T04:14:09.423 回答
2

框架中没有内置任何解决方案,您不能通过反射修改现有类型(以便在运行时添加逻辑)。实现这一点的唯一方法似乎是在编译时。

有一个产品http://www.postsharp.net/可以做到这一点(拦截属性/方法调用),而且似乎有一个免费版本。

于 2013-07-24T04:40:18.407 回答