代码之家  ›  专栏  ›  技术社区  ›  Manish Basantani

在“内部”类中有“public”成员是不是一种糟糕的编程实践?

  •  12
  • Manish Basantani  · 技术社区  · 16 年前

    如果我只将“protected”、“internal”和“private”成员(字段、方法、属性、事件)保留在声明为“internal”的类中,这不是更具体和适当吗?

    我已经在各种代码中看到过这种实践(在“内部”类中有“公共”成员),所以只想知道这是一种糟糕的实践,还是有一些好处或优势。

    [只关心C] 谢谢你的关心。

    7 回复  |  直到 13 年前
        1
  •  8
  •   casperOne    16 年前

    不一定。如果您希望隐式实现接口,那么公共成员是可以接受的。

    一般来说,如果类是内部的,那么公共成员就没有什么意义。您不会受到伤害,因为您将无法在定义类的模块之外以强类型方式公开该类,但是如果您没有隐式实现接口,就没有太大的优势。

        2
  •  5
  •   Dan Bryant    16 年前

    假设这些公共成员仍然是类的公共接口的一部分是合理的,即使类本身具有内部范围也是如此。当我看到 internal 在一个类成员上,这对我说“有点不可靠的后门访问,表示紧密耦合,而 public 在我的头脑中仍然暗示着适当的防御编程职责。这纯粹是概念上的区别。

        3
  •  2
  •   JSBÕ±Õ¸Õ£Õ¹    16 年前

    这个 internal 类的规范限制了 public 关于成员的声明,所以你所有的公众成员 内部的 . 这就是说, 公众的 打字比 内部的 ,所以我的习惯用法是将类声明为 内部的 以及暴露的方法 公众的 . 我只将成员标记为 内部的 如果该类是 公众的 我想把一些成员限制在同一个集会上。

        4
  •  2
  •   Hans Passant    16 年前

    我就是这么做的。当我的大脑认为“这个成员应该是可以接近的”时,我无法控制地开始用手指敲打P U B L I C。不过,当我宣布上课的时候,没有这样的问题。

    一个很大的优势是:使内部类公开(或者相反的方式)的重构只需要更改一个词。微软也这样做了,主要是。

        5
  •  1
  •   JaredPar    16 年前

    我知道的唯一功能原因是隐式实现接口。所有接口方法都必须用 public 以便与接口匹配。即使类型或接口是非公共的,也是如此。

    除了这种有限的情况,我真的不喜欢这种做法。这样做会使您的应用程序的公共表面积变得更难grep。相反,您必须进行更高级的搜索。

    另外,让我感到困扰的是,成员被标记为公开的,而实际上他们不是。

        6
  •  0
  •   OrionRobillard    16 年前

    我试图想象当我设置方法修饰符时类访问修饰符可能发生变化。如果一个方法需要是内部的,即使类是公共的,我也会这样说。如果不是这样,那么该方法将作为公共方法写入。

        7
  •  0
  •   the_new_mr    13 年前

    我会说是的,这是糟糕的编程实践。

    这不仅仅是控制访问。它还将使代码更模块化。

    如果一个对象的数据使用者需要该对象的一些数据,它将调用getter方法。如果以后要返回的数据不同,程序员只需要在一个地方更改代码,而不需要在所有读取该数据的地方(如果成员是公共的)。这类似于为什么我们应该编写函数/方法并调用它们,而不只是复制和粘贴关于该位置的代码。

    这里用一个例子解释: http://www.programmingincpp.com/private-versus-public-data-members-in-a-class.html

    推荐文章