c#项目名称空间问题

本文关键字:空间 问题 项目 | 更新日期: 2023-09-27 18:05:54

我正在为自己创建一个包含在单个项目中的小数学库,并且我遇到了一些名称空间问题。我有项目MyMathLib和顶级命名空间:

namespace MyMathLib
{ ... }

和在另一个文件中…

namespace MyMathLib.Addition
{ ... }

namespace MyMathLib.Subtraction
{ ... }

MyMathLib.Subtraction名称空间中,我有一个方法需要使用在MyMathLib.Addition中定义的静态方法SomeClass.Work(),因此我在减法文件的开头包含using MyMathLib.Addition。但是当我尝试使用该方法时,它希望我首先用Addition.SomeClass.Work()限定它,我希望能够键入SomeClass.Work()。我做错了什么?

谢谢!

编辑

谢谢你的建议!在每个文件中,我实际上以命名空间命名类(即在命名空间MyMathLib.Addition中是一个静态类Addition,在MyMathLib.Subtraction中有一个静态类Subtraction)。显然,这就是导致问题的原因(回头看,我应该说明这一点,而不是使用SomeClass)。如果我将名称空间更改为MyMathLib.MyAddition,同时保持静态类为Addition,则using MyMathLib.MyAddition按我想要的方式工作;也就是说,我现在可以在我的静态Subtraction类中输入Addition.Work()。我以前见过类的命名与它包含的命名空间相同,有人能解释一下为什么这会导致问题吗?编译器不应该能够从代码的上下文中确定我是否要使用名称空间或类吗?

c#项目名称空间问题

我猜您要么有两个称为SomeClass的类,它们都在您引用的名称空间中,要么您有一个名为SomeClass的变量或属性。这两种情况中的任何一种都会使编译器不可能知道您正在尝试调用静态MyMathLib.Addition.SomeClass.Work()方法,但是编译器建议的特定解决方案使其看起来更有可能是前者。

更新

看到你的编辑,这是有意义的。如果您在MyMathLib之外的名称空间中使用这些名称空间,那么您仍然可以避免此名称空间冲突。然而,由于您在MyMathLib.Subtraction名称空间内,编译器将隐式地考虑名称空间"上面"的任何部分。您应该优先于类名。在这种情况下,当您输入" add "时,编译器将查找以下项来解析名称:

  1. 一个由using ... = ...指令明确标识的类。
  2. MyMathLib.Subtraction.Addition命名空间
  3. MyMathLib.Addition命名空间
  4. Addition命名空间
  5. using语句标识的命名空间中的任何类。

在这种情况下,你在第4条之前遇到了第3条,所以你应该能够通过重命名类或名称空间来解决它,或者使用Yahia的建议(#1):

using Addition = MyMathLib.Addition.Addition;

更新2

查看您链接到的文章后,听起来显式using语句仍然不起作用。我猜第1项实际上是在第4项附近进行评估的。游手好闲的人。您可以使用别名在本地为类指定一个不同的名称:

using Add = MyMathLib.Addition.Addition;
...
var add = new Add();

但是最好的解决方案可能仍然只是通过更改名称空间或类名来完全避免名称空间冲突。

尝试在您的减法源

using SomeClass = Addition.SomeClass;

http://msdn.microsoft.com/en-us/library/dfb3cx8s.aspx
http://www.blackwasp.co.uk/NamespaceAliasQualifier.aspx

听起来你在减法命名空间…将下面的内容添加到名称空间声明的顶部:

using Addition;