2010-10-30 38 views
1

我认为在C#中强制名称空间之间的类型可见性而不是程序集(内部)可能有用。在C#中的名称空间之间强制实现类型可见性

似乎这样的概念可以帮助开发人员使用代码库,确保在提供类似功能的另一种内部类型可用的地方使用正确的类型,但会导致“架构”缺点(不需要的依赖关系等) 。

其他人是否认为这会有用,目前有可能吗?如果不是为什么不呢?

此外,preclusions的概念 - 指定名称空间和/或程序集之间引用的负面约束的能力是C#有用的补充吗?

回答

2

您可以让它们公开,使用自定义属性标记它们,然后添加FxCop规则以检查命名空间外部的访问。

这不会安全地强制执行限制,并且在使用反射访问成员时会失败,但如果只是关于策略/编码风格,则应该足够了。

我认为还有一个现有属性可以隐藏Intellisense的成员,您可以将其与自定义属性结合使用。

3

一个类型强烈地绑定到它定义的程序集。名称空间不是,它可以出现在多个程序集中。例如System.Configuration。

让我们暂时假定程序集的元数据格式将被改变(-10亿分)以存储名称空间的属性。这些属性仍然需要存储在程序集中,因为这是元数据的存储单元。现在您必须处理CLR加载另一个程序集并找到相同名称空间但具有冲突属性的可能性。它怎么可能解决这个问题?

更严重的是,如何防止外部代码使用相同的名称空间和属性突然访问实现细节,这些细节本来就是私有的。这完全破坏了拥有内部关键字的价值。

+0

关于跨越程序集的命名空间的强项。我想知道另一种类型的代码分组是否有用。我认为在C#中使用更细粒度的词汇来定义基于客户类型的类型可见性(例如,功能的消费者或合作生产者)是有用的。只是大声思考。 – Ben 2010-10-30 13:20:21

相关问题