【问题标题】:Using Multiple Namespaces to Describe a Class使用多个命名空间来描述一个类
【发布时间】:2013-08-07 02:21:24
【问题描述】:

我正在为游戏编写代码,并希望将我的 main 方法包含在两个不同的命名空间中,以便它可以轻松地从“引擎”和“核心”命名空间访问所有类。

namespace Engine Core
{
    class ExampleClass
    {
    }
}

虽然我只是在 Engine 和 Core 之间放了一个空格,但我知道这种语法是不正确的,我想知道如何让一个类成为多个命名空间的成员。如果这是不可能的,有什么我可以做的事情会发生同样的事情吗? (这两个命名空间中的类都不必通过“Engine.”或“Core”引用此类。

【问题讨论】:

  • 这没有意义。您可以使用 partial 关键字来拆分类的定义(我知道这不是您想要的),但是拥有多个命名空间的类成员如何工作?无论如何,您可以使 ExampleClass 不密封,并从另一个同名命名空间扩展它。喜欢public class ExampleClass : Engine.ExampleClass

标签: c# visual-studio namespaces


【解决方案1】:

一个类不能属于两个不同的命名空间。 如果您想在每次引用这些命名空间的类型时引用引擎或核心命名空间的类而不显式编写命名空间,只需在文件开头使用using。 using 指令允许在命名空间中使用类型,因此您不必限定在该命名空间中使用类型:

using Engine;

using Core;

查看文档:using Directive

【讨论】:

    【解决方案2】:

    所以您希望某人能够通过使用Engine.ExampleClassCore.ExampleClass 访问ExampleClass?我不知道你为什么会(我相信你有你的理由),但有两种方法可以揭露这样的事情:

    namespace Foo
    {
        abstract class ExampleClass
        {
             //Only implement the class here
        }
    }
    
    namespace Engine
    {
        class ExampleClass : Foo.ExampleClass
        {
             //Don't implement anything here (other than constructors to call base constructors)
        }
    }
    
    namespace Core
    {
        class ExampleClass : Foo.ExampleClass
        {
             //Don't implement anything here (other than constructors to call base constructors)
        }
    }
    

    或者您可以使用命名空间别名,但使用该类的每个 cs 文件都需要定义别名。

    using Engine = Core;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-12
      • 1970-01-01
      • 2020-03-20
      • 2012-05-27
      • 1970-01-01
      相关资源
      最近更新 更多