【发布时间】:2011-08-22 14:47:58
【问题描述】:
我有以下代码:
Chromosome[] pop = new Chromosome[popSize];
int[] initialGenes = new int[i];
for (int m = 0; m < i; m++)
initialGenes[m] = -1;
for (int j = 0; j < popSize; j++)
{
pop[j] = new Chromosome(graph, initialGenes);
}
Chromosome 是我的班级并且有一个属性
public int[] Genes { get; set; }
如您所见,我初始化了一个 Chromosome 对象数组。问题是当我尝试更改pop[i].Genes[k] 的值(例如pop[1].Genes[2] = 123)时,所有Genes[k] 的pop 都已更改(即
pop[0].Genes[2] == 123
pop[2].Genes[2] == 123
等等)
谁能解释一下问题出在哪里?
谢谢。
【问题讨论】:
-
您可能需要考虑让 Chromosome 类实例化数组,而不是传入数组实例。如您所见,对同一数组实例进行多次引用可能会产生意想不到的问题。如果您封装数据并通过 GetGene 和 SetGene 方法提供对基因的访问,则染色体不再需要担心其他代码可能会间接破坏其状态。