Страницы

Поиск по вопросам

понедельник, 26 ноября 2018 г.

Расширение класса перегруженными операторами C#

Имеется класс BigInteger библиотеки BouncyCastle, который имеет функции вида BigInteger.Add(BigInteger), Sub, Multiply и т.д. Так вот, для удобной работы хочется создать перегруженные методы operator+, operator- и т.д, т.е. расширить данный класс. Как это можно сделать правильно и по канонам ООП?
Для пользователя все должно выглядеть примерно так:
BigInteger A=5,B=10; BigInteger C = A+B;


Ответ

Боюсь у вас ничего не получится. Дело в том, что интересующий вас синтаксис - обеспечивается перегрузкой операторов, и без возможности модифицировать исходники класса BigInteger вы эту задачу выполнить не сможете. Теоретически вам могла бы помочь такая возможность, как методы расширения (extension methods), но этот синтаксический сахар применим только по отношению к экземплярам, а перегрузка операторов реализуется статическими методами. Наследование тут вам тоже вряд ли поможет, во всяком случае для получения результата в том виде, в котором вы хотите. Вы, конечно, можете создать класс-наследник BigInteger, перегрузить в нём арифметические операторы с помощью соответствующих статических методов, но эти операторы будут работать только применимо к вашему классу-наследнику, то есть писать что-то вроде
BigInteger A=5,B=10; BigInteger C = A+B;
вы не сможете

Комментариев нет:

Отправить комментарий