我们写C# code一般都是public或者private,但是其实还有internal,internal其实非常好用。

第一个是你写的method想不想让别的project能看到呢,如果不想的话那么就要用internal。当然一般情况下全部写public也不是不可以,但是如果能仔细考虑可见性的问题,意味着你在思考怎么限制别人使用你写的code的pattern,这就是在思考怎么让别人能串起来用你写的method,限制用户的使用方式,这种思想训练可以提高设计能力。

第二个internal其实可以让你高内聚。如果有一个class里面全是get/set,另一个class里面是很多method都要传入那个get/set的class obect,那么其实这两个class是不是应该变成一个class才算高内聚。比如说get/set的class是数据库表的entity,另一个class就是操作这些entity的class,但是操作entity的class没有成员,所以把这两个class合在一起是不是就是一个有血有肉的class。此外get/set的class还可以充当数据访问层和上层的数据接口,但是有时你也不想让上层project能直接操作entity,所以操作这些entity的方法可以在同一class里被设为internal。

然后让其他project看不见其实还有一个方法就是返回interface,此时外界调用你的method拿到的是一个interface,他只可以看到你interface暴露出来的接口,但是你的derive这个interface的implement class实际上也可以包含其他internal方法。这样外面即便cast成derived type,也不能用internal method。

用了internal之后,你的工具箱里就又多了几种设计接口的方法了。其实我还会进一步考虑是否让method返回immutable object,这样可以对外层造成一种用完即抛的暗示。还有就是考虑需不需要让外层new出你的object,这里面也有诸多因素,不过这些都能用internal辅助实现。

上一篇 下一篇