2012-04-19 134 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