2010-02-26 23 views
3
object obj = new object[] { new object(), new object() }; 

這是如何編譯的?這似乎令人困惑。這是如何編譯的? c#

似乎應該或者是

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

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

它編譯,因爲你總是可以聲明一個類型爲'object'的變量,並用你喜歡的任何東西在右邊初始化它。如果它是一個值類型,它將被裝箱。 – 2010-02-26 09:39:06

+0

對象是C#的空指針。它可能指向任何東西。 – 2010-02-26 09:42:10

回答

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中運行該代碼,在其中放入幾個斷點並按照它進行操作。它會希望幫助你理解爲什麼你指定的代碼是有效的=)

6

目的是用於一切的基礎。 任何東西都可以分配給一個對象類型的變量。

1

object obj = ...這裏可能指的是一個Collection。並不是說這裏'對象'的不同用法是指相同類型的對象。

1

對象數組是一個對象,但這確實很奇怪。

+1

對我來說,看起來並不奇怪。這是C# – Slavo 2010-02-26 09:42:19

2

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

右手部分確實得到object[]類型的引用,但是該類型,像任何其他類型的,是分配兼容object