C# 对类中的所有属性使用相同的getter和setter

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

我正在创建一个类,其中包含应用程序的选项/配置值。我想将某种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 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接口及其实现