2 つの類似したオブジェクト (C#) 間のバインドが必要です。
public class TypeA
{
public int I;
public string S;
}
public class TypeB
{
public IntField I;
public StringField S;
}
TypeA のフィールドが変更されたら、TypeB の一致するフィールドを更新する必要があります。
IntField は int 型の Value フィールドを持つオブジェクトであるため、TypeB の更新は次のように記述できます。
bInstance.I.Value = aInstance.I;
私が正しく理解していれば、TypeB を TypeA にバインドするために INotifyPropertyChanged を使用すると、ボイラープレートが発生します。
aInstance.PropertyChanged += (sender, args) =>
{
if (args.PropertyName == "I")
this.I.Value = sender.I;
if (args.PropertyName == "S")
this.S.Value = sender.S;
};
また:
- 私は両方のタイプのコードにアクセスできますが、TypeB は変更したくありません。
- TypeA や TypeB などの型のペアが 15 まであります。ボイラープレートは避けたいと思います。
- パフォーマンスは非常に重要であるため、リフレクションは推奨されるオプションではありません。
- おそらく静的反射はオプションですか?聞いたことはありますが、次の点についてはわかりません。
- ボイラープレートなしで使用する方法。
- その性能。
- 同じタイプのペアの異なるインスタンスに使用します (つまり、a1Instance->b1Instance、a2Intance->b2Instance など)。
編集:
IntField はクラスです。これは、システムに存在する別のタイプのデータ バインディングに使用されます (複雑で、システム全体がこれに依存しています)。一般的なバインド可能なフィールドを表すクラスから継承します。ここにその一部があります:
public class IntField : GeneralField
{
private int _value;
public int Value
{
get { return _value; }
set
{
IsDirty = true;
_value = value;
}
}
// ... a couple of abstract method implementations go here (setting _value, and getting value in a non-type specific way)
}