仅设置setter属性
本文关键字:属性 setter 设置 | 更新日期: 2023-09-27 17:58:51
我有一个对象模型,它的属性如下:
public class SomeModel
{
public string SomeString { get; set; }
public void DoSomeWork()
{
....
}
}
我希望DoSomeWork
函数在SomeString
属性更改后自动执行。我试过了,但不起作用:
public string SomeString { get; set { DoSomeWork(); } }
正确的语法是什么?
使用私有字段,如下所示。。。
public class SomeModel
{
private string someString = "";
public string SomeString {
get { return this.someString; }
set {
this.someString = value;
this.DoSomeWork();
}
}
public void DoSomeWork()
{
....
}
}
您不能用自动属性来实现这一点,您必须创建一个由字段支持的"手动"属性。
private string _someString;
public string SomeString
{
get { return _someString; }
set
{
_someString = value;
DoSomeWork();
}
}
如果真的无法处理这个样板(比如说你必须这样做数百次),可以考虑使用PostSharp这样的AOP框架来代表你实现这一点——你只需要声明一个自动属性和一个属性,就可以让二进制重写器实现所需的方案。
这将起作用。。。
private string _someString;
public string SomeString { get { return _someString; } set { _someString = value; DoSomeWork(); } }
private string _someString;
public string SomeString
{
get
{
return _someString;
}
set
{
DoSomeWork();
_someString = value;
}
}
C#团队在C#3.0中引入了自动实现属性。通过编译器创建的匿名字段来支持最小化模型生成的逻辑。当您不需要在对象类的属性上实现任何额外的逻辑时,就会使用这个。所以它只是按照.
public string Name{ get; set;}// auto-implemented property. no additional logic.
如果我们想添加一些逻辑,就像你想添加一个函数一样。我们必须编写一个由私人字段支持的手动属性,如下所示。
private string _Name;
public string Name
{
get {return _Name;}
set {
_Name=value;
DoSomething(); //Additional logic implemented.
}
}