我在C#中有一个源文件,它在自己的命名空间中包含项目的所有misc类型。例如:
#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
...
}
...
}
不幸的是,C#中的#define指令范围只是声明它的文件。有没有办法在C#中做到这一点?我需要知道文件是否包含在项目中,或者至少是否已经预先定义了一个类型,如果没有,则再次定义它。
答案 0 :(得分:3)
在.NET Framework上,如果您希望共享类型库,我建议将它们打包到一个项目中。构建时,它将成为可以像任何其他程序集一样引用的程序集。定义指令用于不同的目的,很少这样。它们不像C ++开发那么普遍。
答案 1 :(得分:0)
您可以在项目级别定义“条件编译符号”。
但不要这样做。将源代码构建到程序集并共享所有类型更容易,更方便。尝试ifdef部分会给你带来很多麻烦,并且只要部分相交,整合2个使用内联部分代码的程序集就会成为噩梦。你只是不想让你头疼。