オブジェクトにプロパティを「追加」するために使用するように設計された .NET のConditionalWeakTableを確認してください。これは、拡張メソッドで効果的に使用できます。
public static class DirtyExtensions {
private class ExtraPropertyHolder {
public bool IsDirty { get; set; }
}
private static readonly ConditionalWeakTable<Control, ExtraPropertyHolder> _isDirtyTable
= new ConditionalWeakTable<Control, ExtraPropertyHolder>();
public static bool IsDirty(this Control @this) {
return _isDirtyTable.GetOrCreateValue(@this).IsDirty;
}
public static void SetIsDirty(this Control @this, bool isDirty) {
_isDirtyTable.GetOrCreateValue(@this).IsDirty = value;
}
}
ConditionalWeakTable を使用する大きな利点は、(弱参照を介して) スレッド セーフとガベージ コレクションを正しく処理しながら、すべての .NET クラスを UserControl でラップする必要がないことです。