gpt4 book ai didi

C#,是否可以在不继承的情况下向所有数据输入控件添加通用属性? (类似于扩展方法)

转载 作者:太空宇宙 更新时间:2023-11-03 19:20:31 32 4
gpt4 key购买 nike

也许有其他策略,但我有一个设置应用程序可以设置许多值。我在想,如果每种类型的控件(文本框、复选框、组合框、datagridivew)都有一个 IsDirty 标志,每当用户编辑值时都会设置该标志。

当然,我可以将每个包装在一个用户控件中,但我想知道是否有一种类似于扩展方法的方法可以避免为每个控件创建用户控件。

有什么想法吗?

谢谢马特

最佳答案

查看 .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 的最大好处是它避免了在正确处理线程安全和垃圾收集(通过弱引用)时必须用 UserControl 包装每个 .NET 类。

关于C#,是否可以在不继承的情况下向所有数据输入控件添加通用属性? (类似于扩展方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12683006/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com