C# 对类中的所有属性使用相同的getter和setter
我正在创建一个类,其中包含应用程序的选项/配置值。我想将某种get和set事件绑定到options类中的所有选项。我的班级看起来像这样:C# 对类中的所有属性使用相同的getter和setter,c#,events,properties,C#,Events,Properties,我正在创建一个类,其中包含应用程序的选项/配置值。我想将某种get和set事件绑定到options类中的所有选项。我的班级看起来像这样: public class Options { public int Option1 { get; set; } public bool Option2 { get; set; } public string Option3 { get; set; } // etc. } private int _option1; public
public class Options
{
public int Option1 { get; set; }
public bool Option2 { get; set; }
public string Option3 { get; set; }
// etc.
}
private int _option1;
public int Option1
{
get => option1;
set
{
_option1 = value;
OnOptionChanged("Option1", value);
}
}
我不想为所有这些看起来完全相同的属性实现getter和setter。理想情况下,我希望这些属性的行为都像定义的那样:
public class Options
{
public int Option1 { get; set; }
public bool Option2 { get; set; }
public string Option3 { get; set; }
// etc.
}
private int _option1;
public int Option1
{
get => option1;
set
{
_option1 = value;
OnOptionChanged("Option1", value);
}
}
我知道上述方法是可行的,也会奏效,但并不十分方便。我的一些想法是让我的选项
类扩展动态对象
并重写TrySetMember
,但这仅在类中不存在成员时调用。我需要定义我的选项属性,因为我需要向每个属性添加XML文档
那么,最后,有没有办法在不向每个属性的setter添加事件调用的情况下实现上述功能?
或者,是否有一种方法可以记录(自动,然后导出到通常的XML文档文件)类中不严格存在的属性?如果没有像PostSharp这样的IL编织工具,您就无法做到这一点:您可以更近一些;考虑:
private void OnOptionChanged(参考T字段,T值,
[CallerMemberName]字符串名称=null)
{
字段=值;
OnOptionChanged(名称、值);
}
...
公共int选项1{
获取=>_选项1;
set=>OnOptionChanged(参考选项1,值);
}
但是,如果没有像PostSharp这样的IL编织工具,你就无法做到这一点:你可以走得更近;考虑:
private void OnOptionChanged(参考T字段,T值,
[CallerMemberName]字符串名称=null)
{
字段=值;
OnOptionChanged(名称、值);
}
...
公共int选项1{
获取=>_选项1;
set=>OnOptionChanged(参考选项1,值);
}
这至少少了一点重复。谢谢你的回答;这要简洁得多。我也会查一下PostSharp。谢谢你的回答;这要简洁得多。我还将查看PostSharp。看一看INPC接口及其实现看一看INPC接口及其实现