我应该为表单上的公共/受保护组件提供访问器方法/ Getter Setter吗?

时间:2008-08-08 14:35:25

标签: .net winforms

如果我的.Net Form包含一个组件/对象,例如我需要从父文件或其他表单访问的文本框,我显然需要将该组件的修饰符“升级”为内部或公共级别变量。 / p>

现在,如果我在我的表单类中提供int或string类型等的公共变量,我不会再考虑使用Getters和(可能)Setter围绕它,即使他们没有做任何其他事情而不是直接访问变量。

但是,VS设计者似乎并没有为那些作为表单组件的公共对象实现这样的Getters / Setter(因此不符合良好的编程习惯)。

所以,问题是;为了做“正确的事”,我应该在Getter和/或Setter中包装这样的VS设计器组件或对象吗?

4 个答案:

答案 0 :(得分:4)

但是,VS设计人员似乎没有为那些作为表单组件的公共对象实现这样的Getters / Setter(因此不符合良好的编程习惯)。”< / p>

如果您指的是拖放到表单上的控件,则这些控件将标记为私有实例成员,并添加到表单的Controls集合中。他们为什么会这样呢?一个表单可以有四十个或五十个控件,为表单上的每个控件提供一个getter / setter是有点不必要和笨拙的。设计人员可以通过公共getter / setter为您提供对特定控件的委派访问权。

设计师在这里做正确的事。

答案 1 :(得分:2)

没有为表单上的组件实现Getters和Setter的原因我相信是因为它们不是“线程安全”.Net对象假设只能由创建它们的表单线程修改,如果你穿上getter和setter你可能会为任何线程打开它。相反,您假设要实现一个委托系统,其中对这些对象的更改被委托给创建它们并在那里运行的线程。

答案 2 :(得分:2)

这是面向对象设计中封装的典型示例。

表单是一个对象,其职责是向用户呈现UI并接受输入。 Form对象和代码的其他区域之间的接口应该是面向数据的接口,而不是暴露Form的内部实现细节的接口。表单的内部工作方式(即控件)应该保持对任何消费代码的隐藏。

成熟的解决方案可能涉及以下设计要点:

  • 公共方法或属性是行为(显示,隐藏,位置)或面向数据(设置数据,获取数据,更新数据)。
  • Form实现的所有事件处理程序都包含在适当的线程委托代码中,以强制执行Form线程执行规则。
  • 控件本身将数据绑定到底层数据结构(如果适用)以减少代码。

这甚至没有提到像单元测试那样的元开发。

答案 3 :(得分:1)

我总是这样做,如果您正在遵循MVP设计,那么为视图组件创建getter / setter将是设计要求。

我不明白你的意思是“不遵守良好的编程习惯”。 Microsoft违反很多良好的编程习惯,以便更容易在Visual Studio上创建内容(为了快速开发应用程序),并且我没有看到缺少控件的getter / setter作为违反任何此类最佳做法。