Type.MakeArrayType 方法

定義

傳回代表目前類型之陣列的 Type 物件。Returns a Type object that represents an array of the current type.

多載

MakeArrayType()

傳回 Type 物件,代表由目前類型組成的一維陣列,其下限為零。Returns a Type object representing a one-dimensional array of the current type, with a lower bound of zero.

MakeArrayType(Int32)

傳回 Type 物件,代表由目前類型組成且為指定維度個數的陣列。Returns a Type object representing an array of the current type, with the specified number of dimensions.

範例

下列程式碼範例會在 Visual Basic) 中建立陣列、 ref (ByRef ,以及類別的指標類型 TestThe following code example creates array, ref (ByRef in Visual Basic), and pointer types for the Test class.

using namespace System;
using namespace System::Reflection;

public ref class Example
{
public:
   static void Main()
   {
      // Create a Type object that represents a one-dimensional
      // array of Example objects.
      Type^ t = Example::typeid->MakeArrayType();
      Console::WriteLine( L"\r\nArray of Example: {0}", t );
      
      // Create a Type object that represents a two-dimensional
      // array of Example objects.
      t = Example::typeid->MakeArrayType( 2 );
      Console::WriteLine( L"\r\nTwo-dimensional array of Example: {0}", t );
      
      // Demonstrate an exception when an invalid array rank is
      // specified.
      try
      {
         t = Example::typeid->MakeArrayType(  -1 );
      }
      catch ( Exception^ ex ) 
      {
         Console::WriteLine( L"\r\n{0}", ex );
      }
      
      // Create a Type object that represents a ByRef parameter
      // of type Example.
      t = Example::typeid->MakeByRefType();
      Console::WriteLine( L"\r\nByRef Example: {0}", t );
      
      // Get a Type object representing the Example class, a
      // MethodInfo representing the "Test" method, a ParameterInfo
      // representing the parameter of type Example, and finally
      // a Type object representing the type of this ByRef parameter.
      // Compare this Type object with the Type object created using
      // MakeByRefType.
      Type^ t2 = Example::typeid;
      MethodInfo^ mi = t2->GetMethod( L"Test" );
      ParameterInfo^ pi = mi->GetParameters()[ 0 ];
      Type^ pt = pi->ParameterType;
      Console::WriteLine( L"Are the ByRef types equal? {0}", (t == pt) );
      
      // Create a Type object that represents a pointer to an
      // Example object.
      t = Example::typeid->MakePointerType();
      Console::WriteLine( L"\r\nPointer to Example: {0}", t );
   }

   // A sample method with a ByRef parameter.
   //
   void Test( interior_ptr<Example^> /*e*/ )
   {
   }
};

int main()
{
   Example::Main();
}

/* This example produces output similar to the following:

Array of Example: Example[]

Two-dimensional array of Example: Example[,]

System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at System.RuntimeType.MakeArrayType(Int32 rank) in c:\vbl\ndp\clr\src\BCL\System\RtType.cs:line 2999
   at Example.Main()

ByRef Example: Example&
Are the ByRef types equal? True

Pointer to Example: Example*

 */
using System;
using System.Reflection;

public class Example
{
    public static void Main()
    {
        // Create a Type object that represents a one-dimensional
        // array of Example objects.
        Type t = typeof(Example).MakeArrayType();
        Console.WriteLine("\r\nArray of Example: {0}", t);

        // Create a Type object that represents a two-dimensional
        // array of Example objects.
        t = typeof(Example).MakeArrayType(2);
        Console.WriteLine("\r\nTwo-dimensional array of Example: {0}", t);

        // Demonstrate an exception when an invalid array rank is
        // specified.
        try
        {
            t = typeof(Example).MakeArrayType(-1);
        }
        catch(Exception ex)
        {
            Console.WriteLine("\r\n{0}", ex);
        }

        // Create a Type object that represents a ByRef parameter
        // of type Example.
        t = typeof(Example).MakeByRefType();
        Console.WriteLine("\r\nByRef Example: {0}", t);

        // Get a Type object representing the Example class, a
        // MethodInfo representing the "Test" method, a ParameterInfo
        // representing the parameter of type Example, and finally
        // a Type object representing the type of this ByRef parameter.
        // Compare this Type object with the Type object created using
        // MakeByRefType.
        Type t2 = typeof(Example);
        MethodInfo mi = t2.GetMethod("Test");
        ParameterInfo pi = mi.GetParameters()[0];
        Type pt = pi.ParameterType;
        Console.WriteLine("Are the ByRef types equal? {0}", (t == pt));

        // Create a Type object that represents a pointer to an
        // Example object.
        t = typeof(Example).MakePointerType();
        Console.WriteLine("\r\nPointer to Example: {0}", t);
    }

    // A sample method with a ByRef parameter.
    //
    public void Test(ref Example e)
    {
    }
}

/* This example produces output similar to the following:

Array of Example: Example[]

Two-dimensional array of Example: Example[,]

System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at System.RuntimeType.MakeArrayType(Int32 rank) in c:\vbl\ndp\clr\src\BCL\System\RtType.cs:line 2999
   at Example.Main()

ByRef Example: Example&
Are the ByRef types equal? True

Pointer to Example: Example*

 */
Imports System.Reflection

Public Class Example
    Public Shared Sub Main()
        ' Create a Type object that represents a one-dimensional
        ' array of Example objects.
        Dim t As Type = GetType(Example).MakeArrayType()
        Console.WriteLine(vbCrLf & "Array of Example: " & t.ToString())

        ' Create a Type object that represents a two-dimensional
        ' array of Example objects.
        t = GetType(Example).MakeArrayType(2)
        Console.WriteLine(vbCrLf & "Two-dimensional array of Example: " & t.ToString())

        ' Demonstrate an exception when an invalid array rank is
        ' specified.
        Try
            t = GetType(Example).MakeArrayType(-1)
        Catch ex As Exception
            Console.WriteLine(vbCrLf & ex.ToString())
        End Try

        ' Create a Type object that represents a ByRef parameter
        ' of type Example.
        t = GetType(Example).MakeByRefType()
        Console.WriteLine(vbCrLf & "ByRef Example: " & t.ToString())

        ' Get a Type object representing the Example class, a
        ' MethodInfo representing the "Test" method, a ParameterInfo
        ' representing the parameter of type Example, and finally
        ' a Type object representing the type of this ByRef parameter.
        ' Compare this Type object with the Type object created using
        ' MakeByRefType.
        Dim t2 As Type = GetType(Example)
        Dim mi As MethodInfo = t2.GetMethod("Test")
        Dim pi As ParameterInfo = mi.GetParameters()(0)
        Dim pt As Type = pi.ParameterType
        Console.WriteLine("Are the ByRef types equal? " & (t Is pt))

        ' Create a Type object that represents a pointer to an
        ' Example object.
        t = GetType(Example).MakePointerType()
        Console.WriteLine(vbCrLf & "Pointer to Example: " & t.ToString())
    End Sub

    ' A sample method with a ByRef parameter.
    '
    Public Sub Test(ByRef e As Example)
    End Sub
End Class

' This example produces output similar to the following:
'
'Array of Example: Example[]
'
'Two-dimensional array of Example: Example[,]
'
'System.IndexOutOfRangeException: Index was outside the bounds of the array.
'   at System.RuntimeType.MakeArrayType(Int32 rank) in c:\vbl\ndp\clr\src\BCL\System\RtType.cs:line 2999
'   at Example.Main()
'
'ByRef Example: Example&
'Are the ByRef types equal? True
'
'Pointer to Example: Example*

MakeArrayType()

傳回 Type 物件,代表由目前類型組成的一維陣列,其下限為零。Returns a Type object representing a one-dimensional array of the current type, with a lower bound of zero.

public:
 abstract Type ^ MakeArrayType();
public:
 virtual Type ^ MakeArrayType();
public abstract Type MakeArrayType ();
public virtual Type MakeArrayType ();
abstract member MakeArrayType : unit -> Type
abstract member MakeArrayType : unit -> Type
override this.MakeArrayType : unit -> Type
Public MustOverride Function MakeArrayType () As Type
Public Overridable Function MakeArrayType () As Type

傳回

Type

Type 物件,代表由目前類型組成的一維陣列,其下限為零。A Type object representing a one-dimensional array of the current type, with a lower bound of zero.

例外狀況

基底類別不支援叫用的方法。The invoked method is not supported in the base class. 衍生類別必須提供實作。Derived classes must provide an implementation.

目前的類型為 TypedReferenceThe current type is TypedReference.

-或--or- 目前的類型為 ByRef 類型。The current type is a ByRef type. 亦即,IsByRef 會傳回 trueThat is, IsByRef returns true.

備註

MakeArrayType方法提供一種方式來產生陣列型別,其專案類型會在執行時間計算。The MakeArrayType method provides a way to generate array types whose element types are computed at run time.

注意 Common language runtime 會區分向量 (也就是一維陣列,一律是以零為基礎的) 和多維陣列。Note The common language runtime makes a distinction between vectors (that is, one-dimensional arrays that are always zero-based) and multidimensional arrays. 通常只有一個維度的向量,與只會有一個維度的多維度陣列不同。A vector, which always has only one dimension, is not the same as a multidimensional array that happens to have only one dimension. 這個方法多載只能用來建立向量型別,而這是建立向量型別的唯一方法。This method overload can only be used to create vector types, and it is the only way to create a vector type. 您可以使用方法多載 MakeArrayType(Int32) 來建立多維度陣列類型。Use the MakeArrayType(Int32) method overload to create multidimensional array types.

另請參閱

適用於

MakeArrayType(Int32)

傳回 Type 物件,代表由目前類型組成且為指定維度個數的陣列。Returns a Type object representing an array of the current type, with the specified number of dimensions.

public:
 abstract Type ^ MakeArrayType(int rank);
public:
 virtual Type ^ MakeArrayType(int rank);
public abstract Type MakeArrayType (int rank);
public virtual Type MakeArrayType (int rank);
abstract member MakeArrayType : int -> Type
abstract member MakeArrayType : int -> Type
override this.MakeArrayType : int -> Type
Public MustOverride Function MakeArrayType (rank As Integer) As Type
Public Overridable Function MakeArrayType (rank As Integer) As Type

參數

rank
Int32

陣列的維度數目。The number of dimensions for the array. 這個數字必須小於或等於 32。This number must be less than or equal to 32.

傳回

Type

物件,代表由目前類型組成且為指定維度個數的陣列。An object representing an array of the current type, with the specified number of dimensions.

例外狀況

rank 無效。rank is invalid. 例如,0 或負數。For example, 0 or negative.

基底類別不支援叫用的方法。The invoked method is not supported in the base class.

目前的類型為 TypedReferenceThe current type is TypedReference.

-或--or- 目前的類型為 ByRef 類型。The current type is a ByRef type. 亦即,IsByRef 傳回 trueThat is, IsByRef returns true.

-或--or- rank 大於 32。rank is greater than 32.

備註

MakeArrayType方法提供一種方式來產生陣列型別,其專案類型會在執行時間計算。The MakeArrayType method provides a way to generate array types whose element types are computed at run time.

注意

Common language runtime 會區分向量 (也就是一維陣列,一律是以零為基礎的) 和多維陣列。The common language runtime makes a distinction between vectors (that is, one-dimensional arrays that are always zero-based) and multidimensional arrays. 通常只有一個維度的向量,與只會有一個維度的多維度陣列不同。A vector, which always has only one dimension, is not the same as a multidimensional array that happens to have only one dimension. 您無法使用這個方法多載來建立向量類型;如果 rank 是1,這個方法多載會傳回有一個維度的多維陣列類型。You cannot use this method overload to create a vector type; if rank is 1, this method overload returns a multidimensional array type that happens to have one dimension. 您可以使用方法多載 MakeArrayType() 來建立向量類型。Use the MakeArrayType() method overload to create vector types.

另請參閱

適用於