C# Работа со стандартными операторами в классах потомков через базовый класс

программирование C# Наследование Перегрузка

Всем привет.
Возник вопрос. Есть несколько классов для которых нужно перегрузить стандартные операторы, такие как +,-,*,/.
Я сделал один абстрактный класс предка в котором перегрузил эти операторы, но так как они могут быть только статиком, то абстракт или виртуал мне поставить не удалось. Таким образом я не могу переопределить эти операторы в потомках.

В программе есть один класс, который будет работать с наследниками этого абстрактного класса, но через базовый класс. (абстрактный). Вопрос в том, смогу ли я вызывать эти перегруженные операторы у наследников, работая через базовый класс?

Чтобы понятней было, примерный набросок.

class A
{
public static operator + (A val1, A val2) {}
}

class B : A
{
public static operator + (A val1, A val2) {}
}

class C : A
{
public static operator + (A val1, A val2) {}
}

теперь в реализации

A obj = new B();
A obj1 = new B();

var res = obj + obj1;


Если надо делать по-другому, опишите пожалуйста как.
Спасибо)

Примечание:
masterpiece6

Что-то я не понял к чему сложения разных потомков?
В каждом из потомков есть свой перегруженный оператор, но он невиртуальный и по сути не переопределяет метод родителя. Так как я работаю через базовый класс, то я не уверен, что вызовется именно метод потомка, а не родителя. В плюсах знаю как это реализовать, но тут из-за static у оператора не получится.

Примечание:
masterpiece6

Я же написал, что у меня будет один класс, который будет работать с наследниками используя интерфейс базового класса. То есть переменная будет типа базового класса, в в этой переменной будет лежать объект-наследник. Это сделано для того, чтобы не городить для каждого из наследников свой класс для работы с ним. Таким образом в базовом классе нужно определить все виртуальные методы, которые будут вызваны для наследников, а операторы мне нужны виртуальные, потому что я их собираюсь использовать при работе с наследниками. В общем я уже нашел ответ.

Вот:

public class B {
public static B operator+(B b1, B b2) { return b1.Add(b2); }
protected virtual B Add(B b2) { // ...}

Примечание:
Poroh-kun

Потому что предок должен содержать поля, общие для наследников
Ответы:
в вашей модели получится так:
зачем в базовом классе (тем более, абстрактном) перегружать операторы? (этот вопрос главный) кроме того, непонятно, зачем вам нужен базовый класс вообще. только для перегрузки операторов? это можно сделать и без базового. можно использовать интерфейсы. почему нельзя создать два отдельных класса, в каждом из которых перегрузить операторы?
а почему абстрактный класс, а не интерфейс?


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.