Товарищи, возник следующий вопрос: балуясь с рефлексией, можно из классов доставать методы, определяющие работу их операторов сложения, вычитания и прочих, зная специальные имена (вроде op_Addition
).
К примеру сей код:
DateTime test = (DateTime)typeof(DateTime).GetMethod("op_Addition").Invoke(null, new object[] { DateTime.Now, new TimeSpan(10) });
Работает аки часы. Однако подобный «трюк» не проходит с Int32
, String
и некоторыми другими классами. Такое чувство, будто для них и не определены таковые операторы, хотя мы знаем, что это не так
Собственно, делая выжимку, мой вопрос таков: где упрятаны методы, определяющие операторы сложения и подобных для Int32
, к примеру?
Они нигде не спрятаны, таких методов попросту нет. Когда компилятор обрабатывает оператор сложения для Int32
, он просто генерирует add
инструкцию в IL
коде. Это сделано в целях производительности.
Аналогично со всеми базовыми типами, которые умеет обрабатывать процессор напрямую: Int64
, float
, double
.
Исключение из этого правила - тип string
. Когда компилятор встречает оператор +
для строк, он генерирует вызов статического метода Concat(string, string)
.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Пишу бота для телеграмДело в том, что после нескольких перезапусков, бот перестаёт получать ключи
Как работать со связями многие-ко-многим?
Делаю клиент-серверную игру на 2х игроковСервер ждет пока 2 игрока пришлют информацию и затем рассылает друг друг