将代码添加到属性的C#get/set而不需要支持字段?

将代码添加到属性的C#get/set而不需要支持字段?,c#,properties,get,set,field,C#,Properties,Get,Set,Field,您知道如何拥有自动生成支持字段的属性吗?如果我去的话: public String SomeProperty {get; set;} 我知道,如果我想向该属性添加代码,我必须创建备份字段,如下所示: public string someProperty = string.Empty; public string SomeProperty { get { return someProperty; } set { someProperty =

您知道如何拥有自动生成支持字段的属性吗?如果我去的话:

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; }
 }
但是我知道这会导致编译错误,因为如果
set
需要声明主体,那么
get
需要声明主体

我已经调查过了,但什么也找不到,但我想我会查一查是否有人知道


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

简单的答案是没有,你不能两全其美。发件人:

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


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


有一种产品可以实现这一点(拦截属性/方法调用),而且似乎有一个免费版本。

键入“propfull”,然后键入tab选项卡-这是一种使用实例字段创建属性的快速方法。问得好。如果它类似于javascript,“this”可以引用属性本身,因此是backing字段。您还可以将doSomething本身作为类中的方法公开。如果你不需要退货value@toddmo,您将失去所属类的上下文。postsharp是一个很好的选择,它允许您进行面向方面编程(AOP)。AOP与其说是减少混乱,不如说是管理横切关注点(跨大量业务需求使用的行为,并且不容易隔离)