C# 带句点的命名空间问题

C# 带句点的命名空间问题,c#,namespaces,C#,Namespaces,我有一门课: namespace FooIOS { public class Foo { public static void doThis() {...} } } 这是有效的: using FooIOS; namespace Sample.iOS { public void method () { Foo.doThis(); } } 但是,当我更改名称空间以插入句点时,情况与此不同: namespace Foo.iOS

我有一门课:

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#非常缺乏经验,我想知道是否有任何方法可以在名称空间中使用句点,而不处理复杂的调用

namespace Foo.iOS
{
    public class Foo
    {
        public static void doThis() {...}
    }
}
您的命名空间名称是
Foo.iOS
,类名是
Foo
,静态方法名称是
doThis()
。访问该方法的完全限定路径是
NAMESPACE.CLASS.method\u NAME
,因此它变成:

Foo.iOS.Foo.doThis();
这里的
C#
没有什么问题,但是您使用的命名有问题

从这一点上,我们可以提出几点建议:

  • 尽量不要在名称空间的名称中使用
    ,因为这会引起混淆
  • 尽量不要将名称空间命名为其中的类,因为这会引起混淆
我对C#相当缺乏经验,我想知道是否有办法 在名称空间中使用句点,而不处理复杂的 打电话

简单的回答是:命名名称空间、类和成员函数的方式要使您和其他人都不会觉得复杂

编辑

考虑到你也可以使用

例如:

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

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

使用Foo.iOS将
带到名称空间中名称空间Sample.iOS
名称空间块中的code>语句,如下图所示,然后您将能够在第一次尝试
Foo.doThis()时调用
doThis()之前给您一个编译错误

namespace Sample.iOS
{
    using Foo.iOS;

    public void method () {
        // this works
        Foo.doThis();
    }
}
相关阅读:由MSDN提供

完全工作的代码示例: 在Visual Studio中创建一个新的控制台应用程序,然后在
Program.cs
类中,删除所有行,粘贴以下内容,进行编译,然后运行

using System;

namespace Foo.iOS
{
    public class Foo
    {
        public static void doThis() { Console.Write("Inside doThis");}
    }
}

namespace Sample.iOS
{
    using Foo.iOS;

    class Program
    {
        static void Main(string[] args)
        {
            method();
            Console.ReadKey();
        }

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

还要注意名称空间、类、方法等是区分大小写的。在OP的示例中,名称空间是FooiOS,但使用的是FooiOS。谢谢您的回答。FooiOS与FooiOS只是一个输入错误。在命名空间中使用
是在大型项目中创建子命名空间的一种非常有效的方法。它本身没有什么问题。NET框架本身非常虔诚地使用这种结构。