愚蠢的命名空间问题

时间:2010-11-11 18:53:15

标签: c# assemblies naming-conventions

好的,我有一个名为BusinessLayer的c#项目,它生成一个名为BusinessLayer的程序集,名称空间是BusinessLayer。

在这个项目的内部,我使用文件夹来存储代码。一个文件夹名为FilterElements,它有一个名为FilterKeyReversal,FilterRandom和FilterToday的文件夹。

我们以FilterRandom文件夹为例。它有一个名为LessThan10DaysGreaterThan50A的类,其名称空间为BusinessLayer.FilterElements.FilterRandom,还有一个名为RunFilter()的公共静态方法;

在使用此方法的网站的代码隐藏页面中,我有using语句,使用BusinessLayer。我还有另一个using语句,使用BusinessLayer.FilterElements。

我认为要公开LessThan10DaysGreaterThan50A类的RunFilter()方法,我可以使用以下语法:FilterRandom.LessThan10DaysGreaterThan50A.RunFilter(),但是我收到以下错误:当前名称FilterRandom不存在上下文。

如果我使用以下内联语法,则错误消失:BusinessLayer.FilterElements.FilterRandom.LessThan10DaysGreaterThan50A.RunFilter(),或者如果我使用using语句:使用BusinessLayer.FilterElements.FilterRandom,则以下语法有效:LessThan10DaysGreaterThan50A .RunFilter()。

我宁愿使用FilterRandom.LessThan10DaysGreaterThan50A.RunFilter(),因为它似乎使代码更具可读性。如果我使用具有以下使用FilterRandom = BusinessLayer.FilterElements.FilterRandom的语法的别名,我可以得到我想要的,但是不太喜欢使用别名的想法,因为它可能导致混乱。

我认为既然我的BusinessLayer命名空间有嵌套的命名空间,我就能够获取剩下的命名空间,但我似乎无法让它工作。任何人都知道如何在不使用别名的情况下完成这项工作,或者我每次都必须使用整个命名空间名称?

感谢。

2 个答案:

答案 0 :(得分:1)

没有,但事实并非如此。我知道这很烦人。

我第一次尝试解决这个问题(我有同样的问题)是添加这些用法:

using FilterRandom = BusinessLayer.FilterElements.FilterRandom;

然后问题变成你必须为你想要包含的每个子命名空间添加一个,这就变得一团糟。

我如何通过更改项目中的名称空间来永久解决这个问题,以便在您的示例中,FilterRandom例如在BusinessLayer

您实际看到的问题是您有太多名称空间。它发生并不奇怪。它们是组织代码和类的好方法,并不是很难让它失控。我更改名称空间的意思是我将许多小名称空间合并为较大的名称空间。这有时意味着重命名类,但我的观点是类名本身应该是有意义的,没有名称空间前缀。

这样,我在我的项目中永久地解决了这些问题(60kloc)并且效果很好。

答案 1 :(得分:1)

请看这篇文章......

Namespace references in C# vs. VB.Net