Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#将函数附加到属性设置器的最短方式(最少的文本量)是什么?_C#_Properties - Fatal编程技术网

C#将函数附加到属性设置器的最短方式(最少的文本量)是什么?

C#将函数附加到属性设置器的最短方式(最少的文本量)是什么?,c#,properties,C#,Properties,我有一个类,它需要在每次属性更改时调用刷新函数。所以我发现自己写了很多这样的东西: private double _x; public double X { get { return _x; } set { _x = value; refresh(); } } 每个属性的刷新函数始终相同。 有没有较短的方法可以做到这一点 另外,我总是通过double x访问priva

我有一个类,它需要在每次属性更改时调用刷新函数。所以我发现自己写了很多这样的东西:

private double _x;
public double X
    {
        get { return _x; }
        set
        {
            _x = value;
            refresh();
        }
    }
每个属性的刷新函数始终相同。 有没有较短的方法可以做到这一点

另外,我总是通过
double x
访问
private double\ux
,因此,如果我能够以某种方式集成
refresh()
方法,那么像
public double x{get;set}
这样的方法就可以很好地工作。

纯粹的C方法是将重复的代码移动到一个方法

在您的情况下,类似这样的情况:

void Set<T>(ref T field, T value)
{
    field = value;
    refresh();
}
private double _x;
public double X { get { return _x; } set { Set(ref _x, value); } }
这是nuget软件包


您可以轻松地为fody创建一个类似的包来调用刷新功能。

您可以使用反射动态添加属性,并为每个字段添加属性,但我怀疑这比为每个属性额外编写一行要短得多。您可以编写自定义[refresher]注释吗?您熟悉代码段吗?它们可以使编写重复代码变得容易得多。