Type.MakeArrayType Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Restituisce un Type oggetto che rappresenta una matrice del tipo corrente.
Overload
| Nome | Descrizione |
|---|---|
| MakeArrayType() |
Restituisce un Type oggetto che rappresenta una matrice unidimensionale del tipo corrente, con un limite inferiore pari a zero. |
| MakeArrayType(Int32) |
Restituisce un Type oggetto che rappresenta una matrice del tipo corrente, con il numero specificato di dimensioni. |
Esempio
Nell'esempio di codice seguente viene creata una matrice, ref (ByRef in Visual Basic) e tipi di puntatore per la classe Test.
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()
Restituisce un Type oggetto che rappresenta una matrice unidimensionale del tipo corrente, con un limite inferiore pari a 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
Valori restituiti
Oggetto Type che rappresenta una matrice unidimensionale del tipo corrente, con un limite inferiore pari a zero.
Eccezioni
Il metodo richiamato non è supportato nella classe base. Le classi derivate devono fornire un'implementazione.
Il tipo corrente è TypedReference.
oppure
Il tipo corrente è un ByRef tipo. Ovvero, IsByRef restituisce true.
Commenti
Il MakeArrayType metodo consente di generare tipi di matrice i cui tipi di elemento vengono calcolati in fase di esecuzione.
Nota Common Language Runtime distingue tra vettori (ovvero matrici unidimensionali che sono sempre in base zero) e matrici multidimensionali. Un vettore, che ha sempre una sola dimensione, non è uguale a una matrice multidimensionale che ha una sola dimensione. Questo overload del metodo può essere usato solo per creare tipi di vettore ed è l'unico modo per creare un tipo vettore. Usare l'overload del MakeArrayType(Int32) metodo per creare tipi di matrice multidimensionali.
Vedi anche
Si applica a
MakeArrayType(Int32)
Restituisce un Type oggetto che rappresenta una matrice del tipo corrente, con il numero specificato di dimensioni.
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
Parametri
- rank
- Int32
Numero di dimensioni per la matrice. Questo numero deve essere minore o uguale a 32.
Valori restituiti
Oggetto che rappresenta una matrice del tipo corrente, con il numero specificato di dimensioni.
Eccezioni
rank non è valido. Ad esempio, 0 o negativo.
Il metodo richiamato non è supportato nella classe base.
Il tipo corrente è TypedReference.
oppure
Il tipo corrente è un ByRef tipo. Ovvero, IsByRef restituisce true.
oppure
rank è maggiore di 32.
Commenti
Il MakeArrayType metodo consente di generare tipi di matrice i cui tipi di elemento vengono calcolati in fase di esecuzione.
Note
Common Language Runtime distingue tra vettori (ovvero matrici unidimensionali che sono sempre in base zero) e matrici multidimensionali. Un vettore, che ha sempre una sola dimensione, non è uguale a una matrice multidimensionale che ha una sola dimensione. Non è possibile utilizzare questo overload del metodo per creare un tipo vettore; se rank è 1, questo overload del metodo restituisce un tipo di matrice multidimensionale che ha una dimensione. Usare l'overload del MakeArrayType() metodo per creare tipi di vettore.