Возможный перегрузить объединяющий пустой указатель оператор?

Действительно ли возможно перегрузить объединяющий пустой указатель оператор для класса в C#?

Скажите, например, что я хочу возвратить значение по умолчанию, если экземпляр является пустым, и возвратите экземпляр, если это не. Код был бы похож на что-то вроде этого:

   return instance ?? new MyClass("Default");  

Но что, если я хотел бы использовать объединяющий пустой указатель оператор, чтобы также проверить если MyClass. MyValue установлен?

41
задан Peter Duniho 29 June 2019 в 18:55
поделиться

3 ответа

Хороший вопрос! Это не перечислено так или иначе в список сверхзагружаемых и несверхзагружаемых операторов , и ничто не упоминается на страница .

оператора, Таким образом, я попробовал следующее:

public class TestClass
{
    public static TestClass operator ??(TestClass  test1, TestClass test2)
    {
        return test1;
    }
}

и я получаю ошибку "Сверхзагружаемый ожидаемый бинарный оператор". Таким образом, я сказал бы, что ответ, с.NET 3.5, нет.

30
ответ дан Simon 27 November 2019 в 00:51
поделиться

Согласно стандарт ECMA-334, не возможно перегрузиться?? оператор.

Точно так же Вы не можете перегрузить следующие операторы:

  • =
  • & &
  • ||
  • ?:
  • ?.
  • проверил
  • , снял флажок
  • новый
  • , typeof
  • как [1 110]
14
ответ дан Peter Duniho 27 November 2019 в 00:51
поделиться

Простой ответ: Никакой

принципы разработки C# не позволяют оператор, перегружающий ту семантику изменения языка. Поэтому сложные операторы, такие как составное присвоение, тернарный оператор и... не могут быть перегружены.

7
ответ дан Mehrdad Afshari 27 November 2019 в 00:51
поделиться
Другие вопросы по тегам:

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