4

我正在做一个项目,我需要为项目的一个阶段设计和使用一组类。

在随后的阶段,我们将不再需要这组类和方法。这些类和方法集将在整个应用程序中使用,因此如果我将它们作为任何其他类添加,我需要在不需要它们时手动删除它们。

在 C# 中有没有办法,以便我可以在类或实例化类的位置上设置属性,以避免实例化和基于属性值的方法调用。

类似的东西,设置

[Phase = 2]
BridgingComponent bridgeComponent = new BridgeComponent();

在这方面的任何帮助表示赞赏。

4

5 回答 5

3

当 C# 编译器遇到#if 指令,最后是 #endif 指令时,它只会在定义了指定符号的情况下编译指令之间的代码。

#define FLAG_1
...
#if FLAG_1
    [Phase = 2]
    BridgingComponent bridgeComponent = new BridgeComponent();
#else
    [Phase = 2]
    BridgingComponent bridgeComponent;
#endif
于 2010-02-05T12:14:07.500 回答
2

听起来你在要求#if

#if Phase2
BridgingComponent bridgeComponent = new BridgeComponent();
#endif

然后/define Phase2,当您希望将 BridgingComponent 包含在构建中时,在编译行上使用 a ,而不是当您不这样做时。

于 2010-02-05T12:14:32.913 回答
1

在 Properties>build 中设置编译标志,例如 PHASE1

并在代码中

#if PHASE1
  public class xxxx
#endif
于 2010-02-05T12:15:13.910 回答
1

您还可以使用 Spring.NET、NInject 等依赖注入框架。另一种方法是使用工厂方法来实例化您的类。然后,您将拥有 Phase1、Phase2 等的工厂类。在后一种情况下,您可以选择运行时而不是编译时。

于 2010-02-05T12:18:31.280 回答
1

关于方法,可以使用Conditional属性:

// Comment this line to exclude method with Conditional attribute
#define PHASE_1

using System;
using System.Diagnostics;
class Program {

    [Conditional("PHASE_1")]
    public static void DoSomething(string s) {
        Console.WriteLine(s);
    }

    public static void Main() {
        DoSomething("Hello World");
    }
}

好消息是,如果未定义符号,则不会编译方法调用。

于 2010-02-05T12:18:34.807 回答