我是一个非常新的C#和.Net开发人员.我最近使用C#创建了一个MMC管理单元,并对它的执行起来感到满意,特别是在听到组织中的其他一些开发人员讲述C++中的难度之后.
我几乎完成了整个项目,并将"public"关键字的每个实例都设置为"internal",除非运行时需要运行snapin.如果您通常将课程和方法公开或内部化,您对此有何感受?
在可能的情况下,我相信黑盒子.作为一名程序员,我想要一个定义明确的黑盒子,我可以轻松地将其放入我的系统中,并让它工作.我给它赋值,调用适当的方法,然后从中取出我的结果.
为此,请仅向我提供该类需要公开工作的功能.
考虑一下电梯.为了让它去一个地板,我按下一个按钮.这是黑匣子的公共接口,它激活了将电梯送到所需楼层所需的所有功能.
你所做的正是你应该做的; 为您的课程提供最小的可见性.哎呀,如果你想要真正全力以赴,你可以制作所有东西 internal
(最多)并使用InternalsVisibleTo
属性,这样你就可以分离你的功能但仍然不会将它暴露给未知的外部世界.
将事情公之于众的唯一理由是,您将项目打包在几个DLL和/或EXE中,并且(无论出于何种原因)您不关心使用InternalsVisibleTo
,或者您正在创建供第三方使用的库.但即使在第三方使用的图书馆中,您也应该尽可能地减少"表面积"; 您可用的课程越多,您的图书馆就越混乱.
在C#中,确保您使用最低可见度的一种好方法是在您需要之前不要使用可见性修改器.C#中的所有内容都默认为可见度最低:类的内部,类成员和内部类的私有.
我认为你应该在内部课程和成员方面犯错.您可以随时增加项目的可见性,但减少它可能会导致问题.如果您正在为其他人构建框架,则尤其如此.
您确实需要小心,但不要隐藏用户的有用功能..NET BCL中有许多有用的方法,如果不使用反射就无法使用.然而,通过隐藏这些方法,减少了必须测试和维护的表面积.