2012-04-19 153 views
4

我想在我的程序中使用一些全局变量。我们有什么可以帮助直接定义全局变量,因为我们在C++中定义了#define。C#中的全局变量

对于例如:说我有以下提到的全局变量在C++:

#define CROSSOVER_RATE   0.7 
#define MUTATION_RATE    0.001 
#define POP_SIZE     100   
#define CHROMO_LENGTH    300 
#define GENE_LENGTH    4 
#define MAX_ALLOWABLE_GENERATIONS 400 

我希望在我的C#程序作为全球唯一的变量来定义这些。请让我知道我该怎么做?

+0

顺便说一句,这是很糟糕的C++代码。 – 2012-04-19 23:01:35

+4

@KonradRudolph:这是无益的批评。 – 2012-04-19 23:09:34

+0

你应该避免全局变量---这是不好的做法 – 2012-04-19 23:09:56

回答

8

您可以将它们定义一个类中:

public static class Constants { 
    public const double CrossoverRate = 0.7; 
    ... 
} 

使用它们像这样:Constants.CrossoverRate

但我只会这样做,如果他们是真的常数,如PI。对于可以改变的参数,我更喜欢使用具有实例级别值的类。我想你会想要这种灵活性来调整你的遗传算法,或者一次使用多个参数集。这是为了做到这一点(不可变类)的一种方法:

public class GeneticAlgorithmParameters { 

    public double CrossoverRate { get; private set; } 
    ... 

    public GenericAlgorithmParameters(double crossoverRate, ... others) { 
    CrossoverRate = crossoverRate; 
    ... 
    } 

} 

现在你传递的GeneticAlgorithmParameters实例您GeneticAlgorithm类的构造函数。

+0

好的解决方案。谢谢...... :) – user1277070 2012-04-19 23:52:29

+0

不客气! – 2012-04-19 23:53:34

1
public static class Constants 
{ 
    public const string MyConstant = "constantValue"; 
} 

你打电话给他们如下:

public void MyMethod 
{ 
    var string = Constants.MyConstant; 
} 
+0

你可以在C#中使用“string”作为变量名吗? – 2012-04-19 23:22:54

+2

@jb:只在前面有@:'@ string'。 – 2012-04-19 23:33:02

+1

你为什么想要? – tsells 2012-04-20 00:27:38