C# 中相同名称空间和 class 名称的问题

Problem with identical namespace and class name in C#

        namespace LedgerCommander.A
        {
            class B
            {
                static public int a = 7;
            }
        }

        namespace LedgerCommander
        {
            using LedgerCommander.A;
            public class MyClass
            {
                private int myProperty;
                public int MyProperty { get { return LedgerCommander.A.B.a; } }
            }
        }

它是 c# 中的功能还是错误?

C# 在出现歧义的情况下总是更喜欢命名空间而不是 class。如果将另一个 class 添加到 LedgerCommander.A,它将变得非常明显:您仍然需要使用 A.A.a 来访问 class A,但是 A.Foo 将正常工作。

另请注意,这仅适用于 MyClassLedgerCommander 中;如果将它放入另一个命名空间,则必须使用 using LedgerCommander; 才能获得相同的行为。

C# 设计指南对此非常具体 (https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/names-of-namespaces):

DO NOT use the same name for a namespace and a type in that namespace.

类型绑定不回溯。如果有歧义,您将需要完全限定类型名称。有时这就像使用名称空间和类型名称一样简单(如您的情况),但有时您需要 完整 路径,可能包括外部别名(哎哟)。只是不要这样做。