Где я могу найти информацию о методах Get, Set и Address для многомерных экземпляров System.Array в .NET?C#

Место общения программистов C#
Ответить
Anonymous
 Где я могу найти информацию о методах Get, Set и Address для многомерных экземпляров System.Array в .NET?

Сообщение Anonymous »

System.Array служит базовым классом для всех массивов в среде Common Language Runtime (CLR). Согласно этой статье:

Для каждого конкретного типа массива среда выполнения добавляет три специальных метода: Get/

Код: Выделить всё

Set/Address
.

и действительно, если я дизассемблирую этот код C#,

Код: Выделить всё

int[,] x = new int[1024,1024];
x[0,0] = 1;
x[1,1] = 2;
x[2,2] = 3;
Console.WriteLine(x[0,0]);
Console.WriteLine(x[1,1]);
Console.WriteLine(x[2,2]);
Я понимаю CIL,

Код: Выделить всё

IL_0000:  ldc.i4     0x400
IL_0005:  ldc.i4     0x400
IL_000a:  newobj     instance void int32[0...,0...]::.ctor(int32,
int32)
IL_000f:  stloc.0
IL_0010:  ldloc.0
IL_0011:  ldc.i4.0
IL_0012:  ldc.i4.0
IL_0013:  ldc.i4.1
IL_0014:  call       instance void int32[0...,0...]::Set(int32,
int32,
int32)
IL_0019:  ldloc.0
IL_001a:  ldc.i4.1
IL_001b:  ldc.i4.1
IL_001c:  ldc.i4.2
IL_001d:  call       instance void int32[0...,0...]::Set(int32,
int32,
int32)
IL_0022:  ldloc.0
IL_0023:  ldc.i4.2
IL_0024:  ldc.i4.2
IL_0025:  ldc.i4.3
IL_0026:  call       instance void int32[0...,0...]::Set(int32,
int32,
int32)
IL_002b:  ldloc.0
IL_002c:  ldc.i4.0
IL_002d:  ldc.i4.0
IL_002e:  call       instance int32 int32[0...,0...]::Get(int32,
int32)
IL_0033:  call       void [mscorlib]System.Console::WriteLine(int32)
IL_0038:  ldloc.0
IL_0039:  ldc.i4.1
IL_003a:  ldc.i4.1
IL_003b:  call       instance int32 int32[0...,0...]::Get(int32,
int32)
IL_0040:  call       void [mscorlib]System.Console::WriteLine(int32)
IL_0045:  ldloc.0
IL_0046:  ldc.i4.2
IL_0047:  ldc.i4.2
IL_0048:  call       instance int32 int32[0...,0...]::Get(int32,
int32)
IL_004d:  call       void [mscorlib]System.Console::WriteLine(int32)
где хорошо видны вызовы вышеупомянутых методов Get и Set. Кажется, арность этих методов связана с размерностью массива, и, вероятно, именно поэтому они создаются средой выполнения и не объявляются заранее. Я не смог найти никакой информации об этих методах в MSDN, а их простые названия делают их устойчивыми к поиску в Google. Я пишу компилятор для языка, поддерживающего многомерные массивы, поэтому мне хотелось бы найти официальную документацию об этих методах, о том, при каких условиях я могу ожидать их существования и какими могут быть их сигнатуры.
В частности, я хотел бы знать, можно ли получить объект MethodInfo для Get или Set для использования с Reflection.Emit без необходимости создания экземпляра массива с правильным типом и размерностью для отражения, как это сделано в связанном примере.

Подробнее здесь: https://stackoverflow.com/questions/255 ... ultidimens
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»