名称空间问题与句点

时间:2014-06-18 18:29:17

标签: c# namespaces

我有一个班级:

namespace FooIOS
{
    public class Foo
    {
        public static void doThis() {...}
    }
}

这有效:

using FooIOS;
namespace Sample.iOS
{
    public void method () {
        Foo.doThis();
    }
}

但是,当我更改命名空间以插入句点时,这不起作用:

namespace Foo.iOS
{
    public class Foo
    {
        public static void doThis() {...}
    }
}

using Foo.iOS;
namespace Sample.iOS
{
    public void method () {
        // Compilation error
        Foo.doThis();
        // Compilation error
        Foo.iOS.doThis()
        // This works but I can't have it that long and complicated (I'm writing an API call)
        Foo.iOS.Foo.doThis();
    }
}

我对C#缺乏经验,我想知道是否有任何方法可以在命名空间中使用句点而不处理复杂的调用。

2 个答案:

答案 0 :(得分:3)

namespace Foo.iOS
{
    public class Foo
    {
        public static void doThis() {...}
    }
}

您的命名空间名称为Foo.iOS,类名为Foo,静态方法名称为doThis()。访问该方法的完全限定路径为NAMESPACE.CLASS.METHOD_NAME,因此它变为:

Foo.iOS.Foo.doThis();

C#没有问题,但是你使用了命名。

从这几个建议

  • 尝试在命名空间的名称中不使用.,因为这会引入混淆
  • 尽量不将名称空间命名为其中的类,因为这会引起混淆。
  

我对C#很缺乏经验,我想知道是否有任何办法   在命名空间中使用句点而不处理复杂的   调用

简短的回答是:以某种方式命名您的命名空间,类和成员函数,使您和其他人看起来并不复杂。

编辑

考虑您也可以使用Namespace Alias

例如:

using IOS = Foo.iOS; 
... 
IOS.Foo.doThis();

但正如我之前所说,最好在名字空间名称中首先避免.

答案 1 :(得分:0)

using Foo.iOS;语句置于<{1}}命名空间块中,如下所示,然后您就可以在第一次尝试时调用namespace Sample.iOS { {1}}以前给你编译错误。

doThis()

MSDN上的Inside or Outside?相关阅读 Eric Lippert

完全正常工作的代码示例:

在Visual Studio中创建一个新的控制台应用程序,然后在Foo.doThis();类中删除所有行,粘贴以下内容,执行编译然后运行。

namespace Sample.iOS
{
    using Foo.iOS;

    public void method () {
        // this works
        Foo.doThis();
    }
}