поле Type SomeType { get; }, ограничение для него SomeTypeA и SomeTypeB, чтобы там не мог быть SomeTypeC?
Нет, это нарушает принцип Барбары Лисков
если родитель обший никак..да я не представляю что там выкидывать ошибку чтоль
не особо понимаю каким образом, если явно каким либо способом сказать прямо в интерфейсе, что там должен быть тип из ряда указанных
Да, исключение аргумента или ошибку компиляции Думаю в сторону атрибута, пытаюсь найти есть ли уже такой
Я так понял, что SomeTypeA, SomeTypeB и SomeTypeC наследуются от Type. Так?
А через Generic нельзя? Типа ISomeInterface<T> where T : Type public T SomeType { get; }
нет, по идее вообще должны быть ограничены интерфейсом, таким образом, что A и B - являются наследниками интерфейса
нет, так как интерфейс должен быть общим, а не 2 разных для 2х классов или я не в ту сторону думаю
Так он и есть общий, где там два разных-то? Главное чтобы SomeTypeA и SomeTypeB были в дереве наследования на одном уровне, но интерфейс будет один, при этом реализовать его можно будет только для этих типов
это сделает невозможным поместить 2 разных наследника интерфейса в 1 список, если указывать дженерик тип
Всё ещё не понимаю задачу Если это просто несвязанные типы A, B и C, то чтобы это реализовать нужен union/discriminated union, система типов шарпов это не поддерживает Можно как-то извратиться, навесить на A и B отдельный интерфейс, либо, если это сторонние классы, то написать обертки для них. Но при этом нет гарантий что не будет некого типа D, тоже реалиюзующий этот интерфейс
Вот бы du был в сишарпе...
как раз суть в том, чтобы в интерфейсе был тип, но чтобы тип мог содержать только типы реализующие этот интерфейс
Гарантировать ты это никак не можешь
А атрибута нет для этого например?
А что этот атрибут будет делать?
проверять тип
Скорее всего, если появился такой вопрос, то не должно быть такого вопроса, т.е. надо менять подход к решению, чтобы этой проблемы вообще не стояло. С архитектурной точки зрения вопрос выглядит как хтоническая дичь.
Как? Атрибут это просто метка
Звучит как будто там где-то должен быть enum вместо колдовства с типами
ну есть же атрибуты ограничения длины строки, как они работают?
Рефлексией и не при любом выходе сеттера, проверяют текущее состояние
зачем?
Добавлять какую-то логику в интерфейс уже само по себе стремная идея, на то он и интерфейс что не может содержать логики. Тогда через абстрактный класс решай задачу, там уже можешь прям в коде проверить кто и что возвращает, но это будет лютейший костыль. Как и сама задача
https://learn.microsoft.com/ru-ru/dotnet/api/system.componentmodel.dataannotations.stringlengthattribute?view=net-7.0 Этот вроде для браузера, но видел аналогичные
Лучше сформулируй более общую задачу, может кто подскажет более удачное решение
Это атрибут для валидатора, он только указывает ограничения на поле, а проверяет эти ограничения уже другой код внутри валидатора, не в самом атрибуте
А чем тебе вариант типа такого не подходит?
Ну вот кто то занимается этой валидацией
Обсуждают сегодня