12

如果我只在声明为“内部”的类中保留“受保护”、“内部”和“私有”成员(字段、方法、属性、事件),这不是更具体和更合适吗?

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

【只关注C#】感谢您的关注。

4

7 回答 7

8

不必要。如果你想隐式实现一个接口,那么公共成员是完全可以接受的。

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

于 2010-06-09T14:51:01.177 回答
5

假设这些公共成员仍然是类的公共接口的一部分是合理的,即使类本身具有内部范围。当我看到internal一个班级成员时,这对我说'有点狡猾的后门访问表达了紧密的耦合,public但在我的脑海中仍然暗示着适当的防御性编程职责。这纯粹是概念上的区别。

于 2010-06-09T16:28:34.490 回答
2

类的internal规范限制了public成员声明的范围,所以你所有的公共成员都是真的internal. 也就是说,public打字比 少得多internal,所以我的习惯用法是将类声明为internal,将公开的方法声明为public。我只将一个成员标记为internal该类,public并且我想将一些成员限制为同一个程序集。

于 2010-06-09T15:01:50.737 回答
2

我就是做这个的。情不自禁,当我的大脑认为“这个成员应该可以访问”时,我的手指不受控制地开始敲击公共。但是,当我声明课程时没有这样的问题。

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

于 2010-06-09T16:14:02.547 回答
1

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

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

此外,它以一种不合理的方式困扰着我,成员被标记为公开,而实际上他们不是。

于 2010-06-09T15:03:05.197 回答
0

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

于 2010-06-09T15:41:14.580 回答
0

我会说是的,这是不好的编程习惯。

这不仅仅是控制访问。这也是关于使代码更加模块化。

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

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

于 2012-09-10T16:50:18.967 回答