このUpdateメソッドを作成しました
public void Update(Person updated)
{
var oldProperties = GetType().GetProperties();
var newProperties = updated.GetType().GetProperties();
for (var i = 0; i < oldProperties.Length; i++)
{
var oldval = oldProperties[i].GetValue(this, null);
var newval = newProperties[i].GetValue(updated, null);
if (oldval != newval)
oldProperties[i].SetValue(this, newval, null);
}
}
2つのPersonオブジェクトを比較し、新しい値があるかどうかを比較します。元のオブジェクトを更新します。これはうまく機能しますが、怠惰なプログラマーなので、もっと再利用できるようにしたいと思います。
このように動作させたいです。
Person p1 = new Person(){Name = "John"};
Person p2 = new Person(){Name = "Johnny"};
p1.Update(p2);
p1.Name => "Johnny"
Car c1 = new Car(){Brand = "Peugeot"};
Car c2 = new Car(){Brand = "BMW"};
c1.Update(c2);
c1.Brand => "BMW"
c1.Update(p1); //This should not be possible and result in an error.
メソッドを保持するために抽象クラスを使用してからジェネリックを使用することを考えていましたが、クラス固有にする方法がわかりません。