체크 아웃 객체에 속성을 "추가"를 사용할 수 있도록 설계되었습니다 .NET의 ConditionalWeakTable. 이 확장 방법과 효과적으로 사용될 수있다 :
ConditionalWeakTable 사용의 가장 큰 장점은 당신이 제대로 스레드 안전 및 가비지 수집을 처리하는 동안 UserControl이와 모든 .NET 클래스를 래핑하는 것을 피할 수 있다는 것입니다
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을 보지 못했습니다. 대답이 아닐지라도 훌륭한 TIL 자료입니다. – FMM