在不需要支持字段的情况下将代码添加到C#get / set属性中?

时间:2013-07-24 04:08:22

标签: c# properties get set field

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

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需要声明一个正文。

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

我想我真正想要的是在某个属性发生变化时触发事件的某种方式,但不必添加所有额外的混乱。有什么建议吗?

2 个答案:

答案 0 :(得分:19)

简单的答案是否定的,你不能双管齐下。来自msdn

  

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

答案 1 :(得分:0)

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

有一个产品http://www.postsharp.net/可以实现此目的(拦截属性/方法调用),并且似乎有免费版。