【问题标题】:Conditional compilation for class properties based on consuming project基于消费项目的类属性条件编译
【发布时间】:2013-10-11 06:10:51
【问题描述】:

是否可以使用#if 编译器指令来省略类的属性?

我有两个使用共享项目的项目,我想向一个共享类添加一些我不希望另一个看到的属性。

我尝试在项目中添加条件编译符号,例如我的符号

然后在我的课堂上这样做:

#if MYSYMBOL

public string MySpecialProperty { get; set; }

#endif

它可以编译,但两个项目都看不到 MySpecialProperty,而显然我希望定义了 MYSYMBOL 的项目能够访问此属性...

【问题讨论】:

  • 为什么不在第二个项目中继承这个类来添加两个新属性呢?如果它们是有条件的,则您的基础项目无法在内部非常有效地使用这两个属性。使它们有条件的需要似乎是一种设计气味。
  • @AdamHouldsworth 感谢您的建议,但我只是想知道我所问的是否可行 :-)

标签: c# c-preprocessor conditional-compilation


【解决方案1】:

MYSYMBOL 必须在编译项目中定义才能使属性可见。因此,如果您有一个公共库项目,您可以在那里定义它,也可以不在那里定义它。因此,无论您在哪个消费项目中使用该库,编译后的库都将始终包含该属性或不包含该属性。

如果您想要不同的行为,您必须在两个使用项目中编译该类。您可以将相同的源文件添加到两个项目中,并使用不同的定义对其进行编译。

【讨论】:

    猜你喜欢
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 2022-07-09
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多