这是如何编译的? C#

时间:2010-02-26 09:35:35

标签: c# compilation

object obj = new object[] { new object(), new object() };

这是如何编译的?这似乎令人困惑。

似乎它应该是

object[] obj = new object[] { new object(), new object() };

object[] obj = { new object(), new object() };

5 个答案:

答案 0 :(得分:6)

对象是一切的基础。 Anything 可以分配给object类型的变量。

答案 1 :(得分:3)

它编译因为“对象”可以是任何东西,因此它可以是对象数组的引用。下面的代码使用字符串来区分更清晰,可能会有所帮助。所以:

List<string> myStrings = new List<string>() { "aa", "bb" };
// Now we have an array of strings, albeit an empty one
string[] myStringsArray = myStrings.ToArray();
// Still a reference to myStringsArray, just held in the form of an object
object stillMyStringsArray = (object)myStringsArray;

// Get another array of strings and hold in the form of an object
string[] anotherArray = myStrings.ToArray();
object anotherArrayAsObject = (object)anotherArray;

// Store both our objects in an array of object, in the form of an object
object myStringArrays = new object[] { stillMyStringsArray, anotherArrayAsObject };

// Convert myStringArrays object back to an array of object and take the first item in the array
object myOriginalStringsArrayAsObject = ((object[])myStringArrays)[0];
// Conver that first array item back into an array of strings
string[] myOriginalStringsArray = (string[])myOriginalStringsArrayAsObject;

本质上,对象始终可以是对任何东西的引用,甚至是对象数组。对象并不关心放在其中的内容,因此在代码的最后,我们有一个字符串数组。在Visual Studio中运行该代码,删除几个断点并跟进。它有望帮助您理解为什么您指定的代码有效=)

答案 2 :(得分:2)

object obj = new object[] { ...}

右手部分确实会产生object[]类型的引用,但该类型与任何其他类型一样,与object分配兼容。

答案 3 :(得分:1)

object obj = ...这里可以指集合。这并不是说'对象'的区别用法是指相同类型的对象。

答案 4 :(得分:1)

一个对象数组是一个对象,但这确实很奇怪。