尽管有“使用”声明,为什么我需要包含部分命名空间?

时间:2011-03-17 17:06:29

标签: c# namespaces

我的解决方案中有一个项目旨在提供一些核心功能。它的名称空间是MyCompanyName.ProductName.FunctionSet。这个项目包括两个班级; customer.cscore.cs。核心类是静态的,包含一个静态方法EntryPoint()。

我在解决方案中有一个控制台应用程序。其名称空间为MyCompanyName.ProductName.TaskMan。我创建了对上面核心项目的引用,并为命名空间添加了using指令。

Main()中的一行是Core.EntryPoint();。注意,它不包括命名空间的任何部分。代码运行正常。

现在,为了解决错误(无法解析符号'EntryPoint'),我需要将行更改为FunctionSet.Core.EntryPoint();。我需要添加命名空间的最后一部分。

为什么我需要添加命名空间的那部分?任何想法为什么它突然停止工作?有什么办法可以省略命名空间部分吗?如果我坚持这一点,这不是什么大问题,但我确实想知道如何以及为什么。

2 个答案:

答案 0 :(得分:1)

编辑:我保留了下面的庞大位,但我现在不确定它是否相关。

我怀疑其中一个是真的:

  • 您的命名空间不是您认为的那样(特别是对于Core)
  • 您没有您认为的使用指令

如果你可以发布一个简短但完整的程序(只有两个类应该足够,只有命名空间,使用指令,类声明和方法 - 不需要任何业务逻辑),它应该很容易理清。


命名空间相对于using指令未解析,尽管它们相对于当前命名空间已解析。例如:

namespace Outer.Inner
{
    class Foo
    {
        public static void Bar() {}
    }
}

namespace Outer.OtherInner
{
    class Test1        
    {
        static void Method()
        {
            // Resolved to Outer.Inner.Foo.Bar()
            Inner.Foo.Bar();
        }
    }
}

namespace OtherOuter
{
    using Outer;

    class Test2
    {
        static void Main()
        {
            // This is invalid
            Inner.Foo.Bar();
        }
    }
}

有关完整的详细信息,请参阅C#规范的第3.8节。

答案 1 :(得分:0)

您是否尝试在文件开头的using语句中添加该函数?

using FunctionSet.Core.EntryPoint
EntryPoint();