Почему не делает оператора поддержки C#, перегружающегося с передачей ссылкой?

Я нашел Профилировщик Памяти.NET вчера, и я должен сказать, что очень впечатлен им.
я собираюсь заказать свою лицензию сегодня.

6
задан Ivan Zlatanov 31 October 2009 в 16:04
поделиться

2 ответа

В C # ваши переменные никогда не изменяются вызываемыми объектами без явной передачи их в качестве ссылок (например, int.TryParse (s, out i) , где вы явно указываете из ключевое слово). Эта функция усложняет задачу, позволяя перегруженному оператору изменять содержимое операндов без вашего явного разрешения.

Например,

public static MyStruct operator + (ref MyStruct left, ref MyStruct right) {
    left = new MyStruct(); // !!!!!!!!
    return something(left, right);
}

Когда вы ссылаетесь на такой оператор в C #:

MyStruct x = new MyStruct();
MyStruct y = new MyStruct();
MyStruct z = x + y; // in C#, you never expect `x` to be changed.
5
ответ дан 17 December 2019 в 02:30
поделиться

Я думаю, это потому, что оператор (в более математической точке зрения, которую, кажется, принимает C #) логически является чем-то, что объединяет свои аргументы в новое значение и никогда не должен ничего изменять. C ++, похоже, рассматривает операторы скорее как версию общих операций с более удобным синтаксисом, чем функции, чем как способ представления математики в частности. Я думаю, что в C # вы почти никогда не встретите таких вещей, как определение операторов для потоковых операций и тому подобное.

1
ответ дан 17 December 2019 в 02:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: