C#名称空间可见性

时间:2009-07-28 08:22:39

标签: c#

我的情况很简单。 我有一个通过WCF服务调用的类A,它将它委托给几个'helper'类。这些“助手”类显然是内部的。问题是我不希望有人直接调用这些类。我希望他们总是称之为A类。这意味着我需要一个'命名空间可见性'。我认为我可以通过将'helper'类私有来模拟它(因此我将它们包含在A中,由于partial关键字,它将被拆分为几个文件(每个帮助类一个))。您对该解决方案有何看法?它很脏吗?

提前致谢。

3 个答案:

答案 0 :(得分:2)

如果辅助类是内部的,那么程序集外部的代码无论如何都无法调用它们。你真的不相信你的装配中的其余代码吗?

在.NET中没有名称空间可见性这样的东西,尽管我同意它有时会有用。

说使用partial来有效地创建一个巨大的类将是一个非常难看的解决方案。我只是将其保留在内部可见性并使用正常的代码审查流程,以避免从其他地方调用帮助程序。哎呀,你甚至可能发现助手 在其他地方真正有用(或者至少是其中的一部分)。

答案 1 :(得分:0)

是的,这将是一个丑陋的解决方案。实际的方法是只在一个单独的程序集中包含A类和其他辅助类,其中A是公共的,辅助类是内部的。你真的有一个合理的担忧,即同一个程序集中的其他类不应该使用帮助程序类。通常,装配是一个结构单元,由一个团队创建。

另一个选项(如果要重新使用辅助类)是将所有内部帮助器类放在一个程序集中,然后使用InternalsVisibleToAttribute打开这些类以供例如: AssemblyA有A类。

答案 2 :(得分:0)

对于较小的解决方案,您可以在需要封装时拆分组件。

但是对于非常大的解决方案(> 100个项目),您可能会被迫寻找替代方案,因为一旦您通过150个项目,Visual Studio开始表现不佳 - 构建时间飙升并且您开始耗尽内存。

令人遗憾的是,在VS2010中,这并没有太大改善。