object obj = new object[] { new object(), new object() };
這是如何編譯的?這似乎令人困惑。這是如何編譯的? c#
似乎應該或者是
object[] obj = new object[] { new object(), new object() };
或
object[] obj = { new object(), new object() };
object obj = new object[] { new object(), new object() };
這是如何編譯的?這似乎令人困惑。這是如何編譯的? c#
似乎應該或者是
object[] obj = new object[] { new object(), new object() };
或
object[] obj = { new object(), new object() };
它編譯是因爲「對象」可以是任何東西,因此它可以是對象數組的引用。下面的代碼使用字符串來使區分更清晰一些,可能會有所幫助。所以:
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中運行該代碼,在其中放入幾個斷點並按照它進行操作。它會希望幫助你理解爲什麼你指定的代碼是有效的=)
目的是用於一切的基礎。 任何東西都可以分配給一個對象類型的變量。
object obj = ...這裏可能指的是一個Collection。並不是說這裏'對象'的不同用法是指相同類型的對象。
在
object obj = new object[] { ...}
右手部分確實得到object[]
類型的引用,但是該類型,像任何其他類型的,是分配兼容object
。
它編譯,因爲你總是可以聲明一個類型爲'object'的變量,並用你喜歡的任何東西在右邊初始化它。如果它是一個值類型,它將被裝箱。 – 2010-02-26 09:39:06
對象是C#的空指針。它可能指向任何東西。 – 2010-02-26 09:42:10