Создать свой оператор C#

226
12 ноября 2021, 15:20

Хочу переписать оператор деления на свой!!!
(оператор "/" Какой-то идиотизм с ним. Мелкософт почему-то думает, что деля целое на целое должно быть целое... float a=1/10 будет 0...)

У меня будет свой тип данных!!! Хочу так:

    Новый тип данных My_data //строка-число 
    {
       длина-32 байта; состоит из базового типа char;
    Оператор div :
        a1,a2 new My_data;
        return Побитовое_деление(Переводим_строку_в_биты(а1),Переводим_строку_в_биты(а1));
    }

Функции Побитовое_деление и Переводим_строку_в_биты реализую сам. Интересует синтаксис объявления своего типа данных и ОПЕРАТОРА!!! Чтобы можно было просто:

My_data a1,a2,a3;
a3= a1 div a1;
Answer 1

В документации есть примеры перегрузки операторов и список перегружаемых операторов.

Запрещено:

  • Перегружать операторы, не входящие в список разрешенных для пергрузки, например, оператор присваивания.

  • Создание новых пользовательских операторов (я имею ввиду определение дополнительных символов операторов и ключевых слов, которые компилятор сможет опознать как оператор). Это не поддерживается языком ни в каком виде.

  • Переопределять операторы для типов, которые определены в чужих библиотеках, включая системные.

Пример перегрузки оператора деления (без логики, это уже пишите сами)

class MyData
{
    //прочие члены класса
    ...
    //определяем новый оператор
    public static MyData operator /(MyData a, MyData b)
    {
        MyData result;
        result = //логика вычисления результата
        return result;
    }
    ...
    //прочие члены класса
}

Как использовать:

MyData a, b;
MyData res = a / b;

Технически, вам ни кто не запрещает творить всякую дичь, вроде такого:

//определяем новый оператор
public static double operator /(MyData a, string b)
{
    return //что-то возвращаем
}

Но тут важно помнить, что один из параметров оператора обязан иметь тип класса, в котором он определен. Ну и надо не запутаться потом в этих дебрях с "дикими" операторами. Сделать код сложным для понимания вплоть до полного отсутствия понимая самим автором как и зачем оно работает гораздо проще, чем сделать его понятным, так что не увлекайтесь без реальной необходимости.

Любите документацию! Читайте документацию к инструментам, которые используете, и пишите ее к инструментам, которые создаете.