我正在创建一个吉他标签程序。
选择音符(GameObject),输入和弦名称(字符串),然后按一个按钮将“和弦”添加到列表中。
Chord类只是一个String和一个GameObjects列表。我使用currentChord来保存当前的选择/名称。
当我选择一个音符时,我将它添加到currentChord.selectedList。
当我输入名称时,我将其设为currentChord.name。
Chord currentChord;
List<Chord> allChords;
单击按钮时,currentChord将添加到allChords(allChords.Add(currentChord))。
问题在于它是实例化的。所以当我点击添加一个不同的选择/名称时,allChords.notes列表中所有内容的选择都会改变...
我是否必须使用“new”关键字?
答案 0 :(得分:2)
是的,您必须使用new
关键字。
您反复将相同的实例添加到列表中,因此您最终得到了对同一实例的引用列表。
从currentChord
中的数据创建新实例以添加到列表中,或将currentChord
中的实例添加到列表中,然后创建新实例并分配给currentChord
。
答案 1 :(得分:0)
您可能还想考虑可用于定义struct
的{{1}}和class
个关键字之间的差异。使用Chord
将提供值类型行为,其中struct
将提供引用类型行为。
例如,这是值类型行为:
class
这是引用类型的行为:
struct Chord
{
public string Name;
}
...
Chord cMajor = new Chord;
cMajor.Name = "C Major";
Chord cMinor = cMajor; // Make a copy of the Chord instance
cMinor.Name = "C Minor";
Assert.That(cMajor.Name, Is.EqualTo("C Major")); // Assertion succeeds
MSDN提供了一个很好的描述:http://msdn.microsoft.com/en-us/library/aa288471(v=vs.71).aspx