这似乎是一个基本问题,但它仍然困扰着我。
为什么不
MyObject [] myobject = new MyObject [10];
分配10个对象?为什么我们必须在每个单独的对象上调用new
?
myobject [0] = new MyObject();
:::
myobject [9] = new MyObject();
或者我只是犯了一个愚蠢的错误? :)
答案 0 :(得分:7)
据我所知,你不是在数组中创建10个对象,你创建的数组有10个空格用于“我的对象”类型的对象,但是对于数组中的项目,null是完全可接受的状态。
答案 1 :(得分:2)
您正在调用数组构造函数,它会创建一个数组,而不是对象构造函数十次。
您想要调用元素类型的构造函数吗?没有办法提供任何参数。隐式调用的唯一构造函数是值类型(结构),如整数和双精度。
如果元素构造函数失败怎么办?它可以抛出任何异常。你应该得到半个初始化数组,还是根本没有数组?异常泡沫或隐藏吗?
如果元素构造函数非常慢,该怎么办?添加一个Thread.Sleep(),调用你的代码基本上会挂起。你会如何调试?
我最后的想法,为什么你在使用List< T>?时甚至使用数组? =)
答案 2 :(得分:1)
您还可以使用以下声明样式(在以下示例中不是特别有用,我建议使用for循环)
MyObject [] myObject = new MyObject [] {new MyObject(),new MyObject(),new MyObject(),new MyObject(),new MyObject(),new MyObject(),new MyObject(),new MyObject (),new MyObject(),new MyObject()};
然而,在这种情况下,输入可能更容易。
int [] myInts = new int [] {10,34,13,43,55,2,0,23,6,23};
答案 3 :(得分:0)
这是因为它只将引用分配给MyObject,而不是对象本身。在C#或Java等语言中,每种非原始类型都是这种情况。
答案 4 :(得分:0)
这正是它应该如何完成的。
例如:
MyObject[] myObject = new MyObject[10]; // creates 10 null references
for (int i=0;i<myobject.Length;i++)
myobject[i] = new MyObject();
答案 5 :(得分:0)
因为你创建的所有内容都是一个包含10个空格的数组,它将包含你的MyObject对象实例。你什么时候把它们放进去和处于什么状态,这取决于你。
答案 6 :(得分:0)
看起来你在语法上谈论C#。
或多或少,在CLR / .NET框架中,数组是一个包含MyObject类型对象的数组。与C / C ++不同,其中数组是MyObject类型的对象数组。
即。 C#数组只是容器,概念上它们与它们所拥有的对象不同。 C / C ++(本机内存),你几乎作弊并放弃了明确职责的形式......你的数组本质上就是它所包含的对象....