2015-06-12 26 views
1

我有一個簡單的代碼:有時候[]是可選的嗎?

class Program 
{ 
    static void Main(string[] args) 
    { 
     Object[] v1 = FuncBunja1(); 
     Object v3 = FuncBunja1(); 

     v1[0].ToString(); 
     (v3 as Object[])[0].ToString(); 
    } 

    private static Object[] FuncBunja1() 
    { 
     Object[] objs = new Object[4]; 

     return objs; 
    } 
} 

如何編譯讓利給V3獲得指針數組?是通過聲明引用單個對象(據我所知)。

從存儲器側I可以看到,v1和v3包含對象

+3

每個對象都是一個'Object'在'C#'和可澆鑄於這種類型。 –

+0

數組是一個對象,因此指向數組的對象引用沒有任何問題。 https://msdn.microsoft.com/en-us/library/2z4khca9.aspx –

+0

概括地說,實例或類型的變量'對象[]'是其基類爲對象,以便編譯器將允許該陣列類的一個實例。 –

回答

1

這是可能的,因爲在類型C#通常從Object繼承,特別是Object[]陣列的地址。

MSDN狀態(雖然不是100%精確):

在C#,所有類型的,預定義的和用戶定義的,引用類型和值的類型的統一類型系統,直接或間接從繼承目的。您可以將任何類型的值分配給對象類型的變量。

由於@RonanThibaudau評論,也有一些例外,見Not everything derives from object。然而:

一個偉大的多種類型都派生自object。所有值類型(包括枚舉和可空類型)都從對象派生。所有類,數組和委託類型都從對象派生。

+0

並非所有類型都從對象繼承(這裏並不重要,但我覺得值得指出,因爲有例外,而且經常錯過陳述)。 http://blogs.msdn.com/b/ericlippert/archive/2009/08/06/not-everything-derives-from-object.aspx –

+0

@RonanThibaudau謝謝!我更新了這篇文章。 – AlexD

0

在.net任何類型從Object繼承,所以作爲一個例子:

  • 類型從相應ObjectObject[]繼承。
  • Object類型int繼承。
  • Object類型int[]繼承。

但是爲了澄清OP,類型int[]不會從int繼承。

相關問題