Каким образом определены операторы у System.Int32 и прочих?

33
06 июля 2018, 06:30

Товарищи, возник следующий вопрос: балуясь с рефлексией, можно из классов доставать методы, определяющие работу их операторов сложения, вычитания и прочих, зная специальные имена (вроде op_Addition).

К примеру сей код:

DateTime test = (DateTime)typeof(DateTime).GetMethod("op_Addition").Invoke(null, new object[] { DateTime.Now, new TimeSpan(10) });

Работает аки часы. Однако подобный «трюк» не проходит с Int32, String и некоторыми другими классами. Такое чувство, будто для них и не определены таковые операторы, хотя мы знаем, что это не так

Собственно, делая выжимку, мой вопрос таков: где упрятаны методы, определяющие операторы сложения и подобных для Int32, к примеру?

Answer 1

Они нигде не спрятаны, таких методов попросту нет. Когда компилятор обрабатывает оператор сложения для Int32, он просто генерирует add инструкцию в IL коде. Это сделано в целях производительности.

Аналогично со всеми базовыми типами, которые умеет обрабатывать процессор напрямую: Int64, float, double.

Исключение из этого правила - тип string. Когда компилятор встречает оператор + для строк, он генерирует вызов статического метода Concat(string, string).

READ ALSO
Написание бота для Телеграм

Написание бота для Телеграм

Пишу бота для телеграмДело в том, что после нескольких перезапусков, бот перестаёт получать ключи

34
Получение данных при связи Многие ко многим

Получение данных при связи Многие ко многим

Есть 2 моделиМежду ними связь многие ко многим

47
Как работать со связями многие-ко-многим, используя LINQ?

Как работать со связями многие-ко-многим, используя LINQ?

Как работать со связями многие-ко-многим?

55
Проблема с udp сокетами

Проблема с udp сокетами

Делаю клиент-серверную игру на 2х игроковСервер ждет пока 2 игрока пришлют информацию и затем рассылает друг друг

56