Web API中的类构造函数



我一直在研究,有点难以找到正确的答案。

假设我有一个具有自动属性的c#类。我希望根据用户将要更改的属性来计算其中一些属性。我知道您可以在创建新对象时使用构造函数来进行此计算。

我想知道的是,在web api中,类构造函数是否在更新时被调用?我是做以下事情还是创建客户设置者?

例如

class myclass 
{
public int Num1 { get; set; }
public int Num2 { get; set; }
public int Num3 { get; set; }
public int Num4 { get; set; }
//these get changed when values above get changed by API
public int result1 { get; set; } 
public int result2 { get; set; }
public int result3 { get; set; } 
//constructor
public myClass()
{
result1 = Num1 + Num2;
result2 = Num3 + Num2;
result3 = Num4 + Num2;
{
}

如果我理解正确,您只需要一些派生的只读属性:

class myclass
{
public myclass()
{
}
public int Num1 { get; set; }
public int Num2 { get; set; }
public int Num3 { get; set; }
public int Num4 { get; set; }

public int result1 => Num1 + Num2;
public int result2 => Num3 + Num2;
public int result3 => Num4 + Num2;
}

您需要使用的是INotifyPropertyChanged,请参阅下面的最小示例

void Main()
{
var test = new myClass();
test.Num1 = 1;
test.Num2 = 2;
test.Num3 = 3;
test.Num4 = 4;
test.result1.Should().Be(3);
test.result2.Should().Be(5);
test.result3.Should().Be(6);
test.Num1 = 2;
test.result1.Should().Be(4);
test.Num2 = 0;
test.result2.Should().Be(3);
test.result3.Should().Be(4);
}
class myClass : INotifyPropertyChanged
{
// private setter since these values are only being set when the num{i} are updated
public int result1 { get; private set; }
public int result2 { get; private set; }
public int result3 { get; private set; }
public event PropertyChangedEventHandler PropertyChanged;
public myClass()
{
PropertyChanged += new PropertyChangedEventHandler(UpdateResultValue);
}
private void UpdateResultValue(object sender, PropertyChangedEventArgs e)
{
result1 = num1 + num2;
result2 = num2 + num3;
result3 = num2 + num4;
}
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
protected bool SetField<T>(ref T field, T value, [CallerMemberName] string propertyName = null)
{
if (EqualityComparer<T>.Default.Equals(field, value)) return false;
field = value;
OnPropertyChanged(propertyName);
return true;
}
private int num1;
public int Num1
{
get => num1;
set => SetField(ref num1, value);
}
private int num2;
public int Num2
{
get => num2;
set => SetField(ref num2, value);
}
private int num3;
public int Num3
{
get => num3;
set => SetField(ref num3, value);
}
private int num4;
public int Num4
{
get => num4;
set => SetField(ref num4, value);
}
}

相关内容

最新更新