Type.MakeArrayType Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Type Возвращает объект, представляющий массив текущего типа.
Перегрузки
| Имя | Описание |
|---|---|
| MakeArrayType(Int32) |
Type Возвращает объект, представляющий массив текущего типа, с указанным числом измерений. |
| MakeArrayType() |
Type Возвращает объект, представляющий одномерный массив текущего типа с нижней границей нуля. |
Примеры
В следующем примере кода создается массив, ref (ByRef в Visual Basic) и типы указателей для класса 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(Int32)
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
Type Возвращает объект, представляющий массив текущего типа, с указанным числом измерений.
public:
abstract Type ^ MakeArrayType(int rank);
public:
virtual Type ^ MakeArrayType(int rank);
public abstract Type MakeArrayType(int rank);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("The code for an array of the specified type might not be available.")]
public virtual Type MakeArrayType(int rank);
public virtual Type MakeArrayType(int rank);
abstract member MakeArrayType : int -> Type
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("The code for an array of the specified type might not be available.")>]
abstract member MakeArrayType : int -> Type
override this.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
Количество измерений для массива. Это число должно быть меньше или равно 32.
Возвращаемое значение
Объект, представляющий массив текущего типа с указанным числом измерений.
- Атрибуты
Исключения
rank недопустим. Например, 0 или отрицательный.
Вызываемый метод не поддерживается в базовом классе.
Текущий тип — TypedReference.
–или–
Текущий ByRef тип — это тип. То есть IsByRef возвращается true.
–или–
rank больше 32.
Комментарии
Этот MakeArrayType метод позволяет создавать типы массивов, типы элементов которых вычисляются во время выполнения.
Note
Среда CLR проводит различие между векторами (то есть одномерными массивами, которые всегда основаны на нулях) и многомерными массивами. Вектор, который всегда имеет только одно измерение, не совпадает с многомерным массивом, который имеет только одно измерение. Невозможно использовать эту перегрузку метода для создания типа вектора; Если rank значение равно 1, эта перегрузка метода возвращает многомерный тип массива, который происходит с одним измерением. Используйте перегрузку MakeArrayType() метода для создания типов векторов.
См. также раздел
Применяется к
MakeArrayType()
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
Type Возвращает объект, представляющий одномерный массив текущего типа с нижней границей нуля.
public:
abstract Type ^ MakeArrayType();
public:
virtual Type ^ MakeArrayType();
public abstract Type MakeArrayType();
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("The code for an array of the specified type might not be available.")]
public virtual Type MakeArrayType();
public virtual Type MakeArrayType();
abstract member MakeArrayType : unit -> Type
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("The code for an array of the specified type might not be available.")>]
abstract member MakeArrayType : unit -> Type
override this.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 Объект, представляющий одномерный массив текущего типа с нижней границой нуля.
- Атрибуты
Исключения
Вызываемый метод не поддерживается в базовом классе. Производные классы должны предоставлять реализацию.
Комментарии
Этот MakeArrayType метод позволяет создавать типы массивов, типы элементов которых вычисляются во время выполнения.
Примечание Среда CLR проводит различие между векторами (то есть одномерными массивами, которые всегда основаны на нулях) и многомерными массивами. Вектор, который всегда имеет только одно измерение, не совпадает с многомерным массивом, который имеет только одно измерение. Эту перегрузку метода можно использовать только для создания типов векторов, и это единственный способ создать тип вектора. Используйте перегрузку MakeArrayType(Int32) метода для создания многомерных типов массивов.