Type.MakeArrayType Metode

Definisi

Mengembalikan Type objek yang mewakili array dari jenis saat ini.

Overload

MakeArrayType()

Mengembalikan objek yang Type mewakili array satu dimensi dari jenis saat ini, dengan batas nol yang lebih rendah.

MakeArrayType(Int32)

Mengembalikan objek yang Type mewakili array dari jenis saat ini, dengan jumlah dimensi yang ditentukan.

Contoh

Contoh kode berikut membuat array, ref (ByRef di Visual Basic), dan jenis pointer untuk Test kelas .

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*

 */
type Example() =
    // A sample method with a ByRef parameter.
    member _.Test(e: Example byref) = ()

do
    // Create a Type object that represents a one-dimensional
    // array of Example objects.
    let t = typeof<Example>.MakeArrayType()
    printfn $"\r\nArray of Example: {t}"

    // Create a Type object that represents a two-dimensional
    // array of Example objects.
    let t = typeof<Example>.MakeArrayType 2
    printfn $"\r\nTwo-dimensional array of Example: {t}"

    // Demonstrate an exception when an invalid array rank is
    // specified.
    try
        let t = typeof<Example>.MakeArrayType -1
        ()
    with ex ->
        printfn $"\r\n{ex}"

    // Create a Type object that represents a ByRef parameter
    // of type Example.
    let t = typeof<Example>.MakeByRefType()
    printfn $"\r\nByRef Example: {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.
    let t2 = typeof<Example>
    let mi = t2.GetMethod "Test"
    let pi = mi.GetParameters()[0]
    let pt = pi.ParameterType
    printfn $"Are the ByRef types equal? {t = pt}"

    // Create a Type object that represents a pointer to an
    // Example object.
    let t = typeof<Example>.MakePointerType()
    printfn $"\r\nPointer to Example: {t}"

(* 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()

Sumber:
Type.cs
Sumber:
Type.cs
Sumber:
Type.cs

Mengembalikan objek yang Type mewakili array satu dimensi dari jenis saat ini, dengan batas nol yang lebih rendah.

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

Mengembalikan

Objek Type yang mewakili array satu dimensi dari jenis saat ini, dengan batas nol yang lebih rendah.

Pengecualian

Metode yang dipanggil tidak didukung di kelas dasar. Kelas turunan harus menyediakan implementasi.

Jenis saat ini adalah TypedReference.

-atau-

Jenis saat ini adalah ByRef tipe. Artinya, IsByRef mengembalikan true.

Keterangan

Metode ini MakeArrayType menyediakan cara untuk menghasilkan jenis array yang jenis elemennya dihitung pada durasi.

Catatan Runtime bahasa umum membuat perbedaan antara vektor (yaitu, array satu dimensi yang selalu berbasis nol) dan array multidmensional. Vektor, yang selalu hanya memiliki satu dimensi, tidak sama dengan array multidmensional yang kebetulan hanya memiliki satu dimensi. Metode ini kelebihan beban hanya dapat digunakan untuk membuat jenis vektor, dan ini adalah satu-satunya cara untuk membuat jenis vektor. MakeArrayType(Int32) Gunakan metode kelebihan beban untuk membuat jenis array multidmensional.

Lihat juga

Berlaku untuk

MakeArrayType(Int32)

Sumber:
Type.cs
Sumber:
Type.cs
Sumber:
Type.cs

Mengembalikan objek yang Type mewakili array dari jenis saat ini, dengan jumlah dimensi yang ditentukan.

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

Parameter

rank
Int32

Jumlah dimensi untuk array. Angka ini harus kurang dari atau sama dengan 32.

Mengembalikan

Objek yang mewakili array dari jenis saat ini, dengan jumlah dimensi yang ditentukan.

Pengecualian

rank tidak valid. Misalnya, 0 atau negatif.

Metode yang dipanggil tidak didukung di kelas dasar.

Jenis saat ini adalah TypedReference.

-atau-

Jenis saat ini adalah ByRef tipe. Artinya, IsByRef mengembalikan true.

-atau-

rank lebih besar dari 32.

Keterangan

Metode ini MakeArrayType menyediakan cara untuk menghasilkan jenis array yang jenis elemennya dihitung pada durasi.

Catatan

Runtime bahasa umum membuat perbedaan antara vektor (yaitu, array satu dimensi yang selalu berbasis nol) dan array multidmensional. Vektor, yang selalu hanya memiliki satu dimensi, tidak sama dengan array multidmensional yang kebetulan hanya memiliki satu dimensi. Anda tidak dapat menggunakan metode ini kelebihan beban untuk membuat jenis vektor; jika rank adalah 1, metode ini kelebihan beban mengembalikan jenis array multidmensional yang kebetulan memiliki satu dimensi. Gunakan metode kelebihan MakeArrayType() beban untuk membuat jenis vektor.

Lihat juga

Berlaku untuk