Не понимаю, в чём ошибка при перегрузке операторов true и false. C#
Задание звучит так: "Написать программу, в которой есть класс с целочисленным и символьным полями. Нужно перегрузить операторы true и false так, что бы истинным считался объект , у которого разность значения целочисленного поля и кода символа из символьного поля не превышала 10. Используйте объект данного класса (в качестве условия в условном операторе) для того,что бы отобразить последовательность символов в консольном окне."
Вроде всё что нужно сделал. Но выводится весь массив символов,словно условия не существует. Не могу понять в чем ошибка и прошу помощи и разъяснений.
Мой код:
class MyClass
{
public int code;
public char sym;
// Конструкторы
public MyClass(int a, char b)
{
code = a;
sym = b;
}
public MyClass(int a)
{
code = a;
sym = (char)a;
}
public MyClass (char b)
{
code = (int)b;
sym = b;
}
//Перегружаем True/False
public static bool operator true(MyClass obj)
{
if (obj.code - (int)obj.sym <= 10 || obj.code - (int)obj.sym >= -10) return true;
else return false;
}
public static bool operator false (MyClass obj)
{
if (obj) return false;
else return true;
}
public override string ToString()
{
string txt = sym + "(" + code + ")" + " ";
return txt;
}
}
class Program
{
static void Main(string[] args)
{
char[] array = new char[] { 'A', 'b', 'D', 'e', 'X', 'I', 'R', 'O', 'k', 'w', 'q', 'L', 'U', 'p', 'F' };
Console.WriteLine("Введите контрольный символ");
MyClass A = new MyClass(Console.Read());
Console.WriteLine();
Console.WriteLine(A);
for (int i = 0; i < array.Length; i++)
{
A.sym = array[i];
if (A) Console.Write(array[i] + "(" + (int)array[i] + ")" + " ");
}
}
}
Ответы (2 шт):
У вас ошибка в условии используйте:
public static bool operator true(MyClass obj)
{
return Math.Abs(obj.code - (int)obj.sym) <= 10;
}
Так вот это условие же работает всегда:
if (obj.code - (int)obj.sym <= 10 || obj.code - (int)obj.sym >= -10) return true;
Даже не важно что у вас там в obj, фактически это тоже самое, что:
if (x <= 10 || x >= -10) return true;
При любом x у вас будет true.