知道表单只有一个实例,在表单不好的情况下使用静态属性吗?

时间:2011-09-03 08:33:32

标签: c# static

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

但这很快变得太复杂了 我正在考虑在表单中将此属性设置为静态,因为它知道应用程序中只有该表单的一个实例。

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

简单地问问自己:这是否与表单或表单的类型有关。假设,如果有多个表格 - 它们是否只是同时读取/不同时?或者是每个表格?

然后:你有答案。我怀疑它应该是实例(非静态)。

答案 2 :(得分:1)

这是另一种解决方案:

  1. 照常将控件添加到表单
  2. 创建一个名为IReadOnlyToggable的界面,该界面具有IsReadOnly属性,并让表单实现它。
  3. 将以下属性添加到自定义控件:
  4. 代码:

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