我正在开发一个项目,我需要设计一组类来用于项目的一个阶段。
在后续阶段,我们不需要一组类和方法。这些类和方法将在整个应用程序中使用,因此如果我将它们添加为任何其他类,我需要在不需要时手动删除它们。
在C#中是否有一种方法,以便我可以在实例化类的类或地方设置属性,以避免基于属性值的实例化和方法调用。
设置
之类的东西[Phase = 2]
BridgingComponent bridgeComponent = new BridgeComponent();
在这方面有任何帮助。
答案 0 :(得分:3)
当C#编译器遇到#if directive,最后是#endif指令时,只有在定义了指定的符号时,它才会在指令之间编译代码。
#define FLAG_1
...
#if FLAG_1
[Phase = 2]
BridgingComponent bridgeComponent = new BridgeComponent();
#else
[Phase = 2]
BridgingComponent bridgeComponent;
#endif
答案 1 :(得分:2)
听起来像是在问#if。
#if Phase2
BridgingComponent bridgeComponent = new BridgeComponent();
#endif
然后,当您希望BridgingComponent包含在构建中时,在编译行上使用/define Phase2
,而不是在不构建时使用{{1}}。
答案 2 :(得分:1)
在Properties> build中设置编译标志,例如PHASE1
并在代码中
#if PHASE1
public class xxxx
#endif
答案 3 :(得分:1)
您还可以使用依赖注入框架,如Spring.NET,NInject等。另一种方法是使用工厂方法来实例化您的类。然后,您将拥有Phase1,Phase2等的工厂类。在后一种情况下,您有运行时选择而不是编译时间。
答案 4 :(得分: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");
}
}
好处是,如果未定义符号,则不会编译方法调用。