考虑以下代码:
public class Foo
{
private float propA = 1.0f;
public float PropA
{
get { return propA; }
set { if (value != propA) { propA = value; DoBar(); } }
}
private int propB = 2;
public int PropB
{
get { return propB; }
set { if (value != propB) { propB = value; DoBar(); } }
}
private double propC = -1.0;
public double PropB
{
get { return propC; }
set { if (value != propC) { propC = value; DoBar(); } }
}
void DoBar()
{
//...Something is going on here
}
}
我想知道,是否有人可以推荐一种更好的方法来在C#lang中创建属性?
例如,在C ++中,我将为此目的使用MACRO
,因为它不仅使我可以在属性更改时执行某些操作,而且还可以减少样板代码的重复。
谢谢。
答案 0 :(得分:0)
您可以执行以下操作:
public class Foo
{
private float propA = 1.0f;
public float PropA
{
get => propA;
set => CheckAndExecute(ref propA, value);
}
private int propB = 2;
public int PropB
{
get => propB;
set => CheckAndExecute(ref propB, value);
}
private double propC = -1.0;
public double PropC
{
get => propC;
set => CheckAndExecute(ref propC, value);
}
private void CheckAndExecute<T>(ref T oldVal, T newVal) where T : IEquatable<T>
{
if (((IEquatable<T>) oldVal).Equals(newVal)) return;
oldVal = newVal;
DoBar();
}
void DoBar()
{
//...Something is going on here
}
}
您可以通过通用方法重复进行这项工作。