句点的命名空间问题

本文关键字:问题 命名空间 句点 | 更新日期: 2023-09-27 18:09:27

我有一个类:

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_NAME ,因此它变为:

Foo.iOS.Foo.doThis();

这里没有错 C# ,但您使用的命名。

从中提出一些建议

  • 尽量不要在命名空间的名称内部使用.因为这会带来混淆
  • 尽量不要将命名空间命名为其内部的类,因为这会带来混淆。

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

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

编辑

请考虑还可以使用命名空间别名。

例如:

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

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

using Foo.iOS; 语句放在 namespace Sample.iOS 命名空间块,如下所示,然后您就可以像第一次尝试Foo.doThis();之前给你一个编译错误一样调用doThis()

namespace Sample.iOS
{
    using Foo.iOS;
    public void method () {
        // this works
        Foo.doThis();
    }
}

相关阅读:Inside or Outside?作者:Eric Lippert在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();
        }
    } 
}