在知道只有一个窗体实例的情况下,在窗体中使用静态属性是不好的做法吗?

本文关键字:窗体 属性 静态 有一个 实例 情况下 | 更新日期: 2023-09-27 18:07:30

在一个复杂的表单中,我有一个名为Readonly的属性,它决定是否所有内容都是可编辑的。到目前为止,我通过构造函数将这个属性传递给这个表单中的每个子自定义控件,在其他地方,我访问表单本身以获取值。

但是这很快就变得太复杂了。
我正在考虑使这个属性静态在表单中知道这个表单在应用程序中只有一个实例。

是否可以使用这个属性作为静态在这种情况下?或者这是一个不好的做法,即使只有一个表单的实例

在知道只有一个窗体实例的情况下,在窗体中使用静态属性是不好的做法吗?

即使你有一个使用静态字段的表单实例也不能使它安全。可能有多个线程会导致问题。更不用说单元测试应用程序的难度了。我个人尽量避免使用静态字段。

问问自己:这与表单类型有关吗?假设,如果有一个以上的形式-他们都是只读/非在同一时间?或者是表现形式?

那么,你就有答案了。我猜应该是实例(非静态)

这是另一个解决方案:

  1. 像往常一样在表单中添加控件
  2. 创建一个名为IReadOnlyToggable的接口,该接口具有IsReadOnly属性,并让表单实现它。
  3. 在自定义控件中添加以下属性:
代码:

public bool IsFormReadOnly
{
    get 
    {
        var form  = ParentForm as IReadOnlyToggable;
        return form != null && form.IsReadOnly;
    }
}