Deutsch

C# - сделать в потомке дженерика параметр типа налловым

Сегодня, 11:44
Re: C# - сделать в потомке дженерика параметр типа налловым
 
alex445 патриот
в ответ AlexNek 3 дня назад, 13:07, Последний раз изменено Сегодня, 12:01 (alex445)

Новые данные - я не могу менять базовый класс. По крайней мере сейчас нет - надо с главным говорить, а он либо сам это будет делать, либо потом мне дадут, но не сейчас. И только если будет время - там на самом деле всё сложнее и на этот базовый класс завязано несколько других классов, а я сейчас просто вычленил конкретную проблему, обрав всё остальное.


Сейчас нужно найти какое-то более быстрое решение, без сильного переписывания базового класса. А на данный момент в базовом нет методов типа CoreProcess, как предложил Алекснек.


Если я правильно понял, то ты хочешь что-то такое:


class Derived<T> : Base<T?>
where T: struct, INumber<T>
{
}

Не это

Base


Вся суть

where T: struct

- чтобы можно было потом делать члены класса с типом T?


Хотел сделать универсальную обработку и для ссылочных типов, и для значений. Для этого в базовом классе есть обработка ProcessValue с типом T без ограничений на тип. Это то, что мне досталось. Теперь надо сделать тип, который таким же образом обрабатывает только числа. Я решил унаследоваться от базового класса и просто использовать его метод ProcessValue, но сделать дополнительное ограничение на тип, чтобы были возможны только числа:


where T: INumber<T>


Ну и потом добавилось требование - налловые числа:


where T: struct, INumber<T>


А сам код ProcessValue должен по сути остаться тем же - там весьма базовый функционал, который подходит под все типы. Но в таком наследовании его базовую версию нельзя вызвать из потомкового класса - см.


Если как-то поиграться с переопределениями и сигнатурами при наследовании нельзя, чтобы не переписывать базовый метод ProcessValue, то у нас есть пока костыль попроще и побыстрее, а переписывать базовый класс будем позже.


Забыл лишь написать, что ProcessValue может быть объявлен виртуальным в базовом классе - это можно сделать сейчас.

 

Перейти на