【问题标题】:How to know if a type has been already declared in another source file in C#?如何知道一个类型是否已经在 C# 的另一个源文件中声明?
【发布时间】:2011-07-02 00:59:26
【问题描述】:

我有一个 C# 源文件,它在自己的命名空间中保存项目的所有杂项类型。示例:

#define HELPER_FILE

using System;

namespace Helper
{
    public struct NormalBalance : INormalType
    {
        public int Position { get; set; }
        public float Normal { get; set; }
    }

    ...

}

然后,其他文件使用这些类型。我想将其中一些分发给我团队中的其他人,但他们不需要所有文件或类型,但某些数据结构是共享的。

例如:

using System;

namespace DataPump
{
    public class Pumper
    {
        private Helper.NormalBalance[] norm;

        ...
    }

    ...

}

但是这段代码依赖于之前包含 Helper.NormalBalance 类型的文件。我想要一种同步文件的方法,以便一个人知道另一个文件的存在,就像在 C++ 中我们可以在声明类型的文件中使用 #define 指令一样,如果客户端文件没有看到定义的令牌,它将有条件地编译类型如下:

(C++代码如下)

    class Pumper
    {

    private:

#ifndef HELPER_FILE
        struct NormalBalance
        {
            int Position;
            float Normal;
        }

        NormalBalance[] norm;

#else

        Helper.NormalBalance[] norm;

#endif

        ...
    }

    ...

}

不幸的是,#define 指令在 C# 中的作用域只是声明它的文件。有没有办法在 C# 中做到这一点?我需要知道该文件是否包含在项目中,或者是否至少以前定义了一个类型,如果没有,请重新定义它。

【问题讨论】:

    标签: c# file types c-preprocessor


    【解决方案1】:

    在 .NET Framework 上,如果您希望共享类型库,我建议将它们打包到一个项目中。构建后,它成为一个可以像任何其他程序集一样被引用的程序集。定义指令用于不同的目的,而且很少使用。它们不如 C++ 开发中流行。

    【讨论】:

      【解决方案2】:

      您可以在项目级别定义“条件编译符号”。

      但不要那样做。将源代码构建到程序集中并共享所有类型更加容易和方便。尝试 ifdef 部分将给您带来很多麻烦,并且一旦部分相交,集成 2 个使用内联代码部分的程序集将是一场噩梦。你只是不想让你这么头疼。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多