В C # 7.2 мы видели введение модификатора in
для параметров метода для передачи ссылок на объекты только для чтения.Я работаю над новым проектом .NET Standard, используя 7.2, и из любопытства я попытался скомпилировать с ключевым словом in
параметры для операторов равенства для структуры.
т.е. - public static bool operator == (in Point l, in Point r)
не - public static bool operator == (Point l, Point r)
Сначала я был немного удивлен, что это сработало, но немного подумав, я понял, что между двумя версиями оператора, вероятно, нет функциональной разницы.Я хотел подтвердить эти подозрения, но после некоторого тщательного поиска я не могу найти ничего, что явно говорит об использовании ключевого слова in
в перегрузках операторов.
Так что мой вопрос заключается в том, действительно ли этоимеет функциональное различие, и если это так, есть ли какая-либо особая причина поощрять или препятствовать использованию in
с аргументами оператора.Мои первоначальные мысли заключаются в том, что нет никакой разницы, особенно если оператор встроен.Однако, если это действительно имеет значение, кажется, что параметры должны использоваться везде ( везде, где имеют смысл только ссылки для чтения, то есть ), поскольку они обеспечивают бонус скорости, и, в отличие от ref
иout
, не требуйте от пользователя добавлять эти ключевые слова при передаче объектов.Это позволит более эффективно передавать объект типа значения без единого изменения пользователя методов и операторов.
В целом, это может выходить за рамки мелкомасштабных оптимизаций, о которых беспокоится большинство разработчиков C #, ноМне любопытно, имеет ли это эффект.