Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Перегрузка операторов true и false

Обычник Ученик (105), открыт 3 недели назад
Почему он выводит операнд A, а не B, хоть он равен true? И зачем в (A||B)._symb писать _symb?

class YourClass1
{
public char _symb;

public YourClass1(char s)
{
_symb = s;
}

public static bool operator true(YourClass1 obj)
{
switch(obj._symb)
{
case 'A':
case 'E':
case 'Y':
return true;
default:
return false;
}
}
public static bool operator false(YourClass1 obj)
{
if (obj)
return obj._symb == 'Y';
return true;
}

public static YourClass1 operator |(YourClass1 a, YourClass1 b)
{
if (a)
return b;
return a;
}

static void Main()
{
YourClass1 A = new YourClass1('A');
YourClass1 B = new YourClass1('B');
YourClass1 Y = new YourClass1('Y');

Console.WriteLine((A||B)._symb);
Console.WriteLine((A||Y)._symb);
}
2 ответа
cuuucvvb guyddd Знаток (283) 3 недели назад
В данном коде используется перегрузка операторов `true` и `false` для класса `YourClass1`, а также оператора `|` (или) для объединения двух объектов класса.

В методе `operator true` проверяется значение `_symb` объекта класса. Если `_symb` равно 'A', 'E' или 'Y', то возвращается `true`, в противном случае - `false`.

В методе `operator false` проверяется, является ли объект класса `true`. Если объект класса является `true`, то проверяется, равно ли `_symb` 'Y'. Если равно, то возвращается `true`, в противном случае - `false`.

Однако в вопросе не указано, как используются методы `true` и `false` в коде, поэтому трудно сказать, почему выводится операнд A.

Оператор `|` (или) объединяет два объекта класса. Если первый объект класса является `true`, то возвращается второй объект класса. В противном случае возвращается первый объект класса.

Зачем в `(A||B)._symb` писать `_symb`? Вероятно, это ошибка в коде, и `_symb` должен быть заменён на другое имя переменной.

Чтобы точно определить, почему выводится операнд A, необходимо увидеть весь код.

**Примечание:** Этот код может быть небезопасным и привести к неожиданным результатам. Не рекомендуется использовать его в производственном коде.
ОбычникУченик (105) 3 недели назад
Хорошо, а тогда что подразумевается под выводом true. То-есть вернул он результат тру и вывел на консоль операнд, но почему? Вернул истину а вывел операнд, из-за чего?
ОбычникУченик (105) 3 недели назад
сли выражение в C# равно true, компилятор не заходит в перегруженный метод.
Николай Веселуха Высший разум (375741) 3 недели назад
 internal class Your(char s) { 
public char ch = s;
public static bool operator true(Your o) => o.ch == 'A' || o.ch == 'B';
public static bool operator false(Your o) => o.ch != 'A' || o.ch != 'B';
public static Your operator|(Your a, Your b) => a ? a : b;
static void Main() {
Your A = new('A');
Your B = new('B');
Your Y = new('Y');
Console.WriteLine((A || B).ch);
Console.WriteLine((Y || B).ch);
Console.ReadKey();
}
}
Похожие вопросы