我能够创建一个我创建的结构数组,但是我在为类的数组做同样的事情时遇到了麻烦.我(微弱地)意识到这可能不是最好的方法,但我很感激帮助弄清楚发生了什么.
我大约需要2天时间学习C#,而且我正在离开MS Office-VBA,如果这能让你知道我在做什么.无论如何,我正在关注一个在线参考,并一直试图玩到目前为止我学到的东西.这个问题是我演奏的结果.
首先,让我用一些代码片段描述我对struct所做的事情,以及该结构的数组.
我已经能够创建一个名为Machines 的结构 ...
// play with structs
struct Machines
{
// vars for struct
private string model, SN;
private int hours;
// assign values
public void AssignValues(string model_in, string SN_in, int hours_in)
{
model = model_in;
SN = SN_in;
hours = hours_in;
}
// display values
public void DisplayValues()
{
Console.WriteLine("Model: {0}", model);
Console.WriteLine("SN: {0}", SN);
Console.WriteLine("Hours: {0}", hours);
}
};
Run Code Online (Sandbox Code Playgroud)
......事情似乎工作得很好:
public static void Main()
{
// play with structures
Machines machine1 = new Machines();
machine1.AssignValues("AA", "ABC01234", 34760);
machine1.DisplayValues();
Run Code Online (Sandbox Code Playgroud)
输出是:
Model: AA
SN: ABC01234
Hours: 34760
Run Code Online (Sandbox Code Playgroud)
然后,我可以创建一个struct的数组,事情继续顺利:
// play with structures and arrays
// declare, create new instance
Machines [] MyArr = new Machines[10];
MyArr[0].AssignValues("AA", "ABC01235", 43000);
MyArr[0].DisplayValues();
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在课堂上做同样的事情时,这是一个不同的故事.这是怎么回事?
public class ArmstrongMachine
{
// vars for struct
private string model, SN;
private int hours;
// assign values
public void AssignValues(string model_in, string SN_in, int hours_in)
{
model = model_in;
SN = SN_in;
hours = hours_in;
}
// display values
public void DisplayValues()
{
Console.WriteLine("Model: {0}", model);
Console.WriteLine("SN: {0}", SN);
Console.WriteLine("Hours: {0}", hours);
}
};
Run Code Online (Sandbox Code Playgroud)
...
// play with classes
ArmstrongMachine [] MyMachines = new ArmstrongMachine[10];
MyMachines[0].AssignValues("AA", "ABC01236", 51000);
MyMachines[0].DisplayValues();
Run Code Online (Sandbox Code Playgroud)
这个问题似乎始于MyMachines[0].AssignValues....如果我注释掉该行和以下内容,则没有问题(除了警告我创建了一个我不使用的变量).
有任何想法吗?
此外,请注意这是在线编译.
类为您提供C#中的引用类型.
因此,数组保存对象的引用,而不是对象本身.
该数组最初不包含任何零,全部为零,这意味着所有引用都将是null.
您需要初始化数组的每个元素以保存对象引用:
// play with classes
ArmstrongMachine [] MyMachines = new ArmstrongMachine[10];
MyMachines[0] = new ArmstrongMachine();
MyMachines[0].AssignValues("AA", "ABC01236", 51000);
MyMachines[0].DisplayValues();
MyMachines[1] = new ArmstrongMachine();
MyMachines[2] = new ArmstrongMachine();
...
MyMachines[9] = new ArmstrongMachine();
Run Code Online (Sandbox Code Playgroud)
如果数组包含值类型(如结构),则数组本身保存结构值,因此它适用于结构,而不是对象.
另请注意,您应该强调不要使用可变结构(您可以更改的结构).有吨的东西,可以去错了,咬你......所以你不应该使用它们.在这种情况下使用类.
这是一个关于可变结构主题的视频:邪恶的结构,由Jon Skeet.
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |