【问题标题】:C# directives & namespace problemC# 指令和命名空间问题
【发布时间】:2010-12-27 14:00:58
【问题描述】:

我这里有问题。我有一个类库,即ClLib,并且有以下8个cs文件。

  • 表达(父类)
    - 1E1
    - 1E2
    - 1E3

  • 普通(父类)
    - 1N1
    - 1N2
    - 1N3

此外,每个 8 个类文件中还包含一个方法。例如,

public class 1E1:Express
{
    public int subtractNumExp1E1(int firstNum, int secNum)
    {
        return firstNum - secNum;
    }
}

1E1:Express 用于显示父类(Express)和子类(1E1)之间的关系。

我还在 Visual Studio 中创建了一个 Windows 应用程序,我需要创建一个指令,如“使用 ClLib.Express.1E1”。我该怎么做?我陷入了这种情况,当我想将 1E1 的命名空间从“命名空间 ClLib”更改为“命名空间 ClLib.Express.1E1”时。发生错误,因为命名空间 ClLib 已经包含 Express 的一个定义。

非常感谢和感谢所有愿意帮助我的好心人:)

【问题讨论】:

    标签: c# class namespaces


    【解决方案1】:

    您不能拥有同名的类型和命名空间(“CILib.Express”)。

    如果您想要CILib.Express 命名空间,最简单的 选项是移动/重命名CILib.Express 类型。

    但是,您也可以有嵌套类型。例如,您可以:

    namespace CILib {
        public class Express {
            public class SomeType {}
        }
    }
    

    如果需要考虑单独的文件:

    文件 1:

    namespace CILib {
        public partial class Express { 
            // "Express" code
        }
    }
    

    文件 2:

    namespace CILib {
        public partial class Express {
            public class SomeType {
                // "SomeType" code
            }
        }
    }
    

    但是,using 指令仅与命名空间相关;我认为你不能拥有using CILib.Express,因为那是一种类型而不是命名空间。

    【讨论】:

      【解决方案2】:

      在这种情况下,您只需删除命名空间 ClLib 并确保只有一份 ClLib.Express.1E1 副本

      P/S:你确定正确的命名空间是ClLib.Express.1E1吗? 1E1 是一个cs文件,通常是一个类。所以你不必写using ClLib.Express,这就足够了。

      【讨论】:

      • 你的意思是删除哪个文件的命名空间ClLib?
      【解决方案3】:

      我认为命名空间和基类存在混淆。

      命名空间:ClLib.Express 类:公共类1E1:Express

      将您的基类重命名为 ExpressBase 以区分它。

      如果需要引用命名空间:

      使用 ClLib.Express

      希望我已经了解您的项目结构!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-02
        • 2020-03-04
        • 1970-01-01
        • 1970-01-01
        • 2012-01-27
        • 2018-02-20
        相关资源
        最近更新 更多