Представьте, что всякий раз, когда вы создали общий класс MyClass<T>
, автоматически генерируется интерфейс MyClass<>
, который имеет все методы и свойства , которые не используют общие параметры или возвращаемые значения.Будет ли какой-либо фундаментальный недостаток в переменном типе, который может содержать общие классы произвольных типов T?
Это избавит меня от такой большой работы по созданию одноразовых интерфейсов, чтобы иметь возможность обрабатывать общие объекты разных типов T
. Существует ли фундаментальная проблема с идеей, которая является причиной того, что она не является частью языка, или просто случай «это не было приоритетом или считается важным»?
Когда я говорю «интерфейс», я не имею в виду, что это обязательно будет классифицироваться и называется «интерфейсом». Это был простой способ объяснить, что я имею в виду. Еще одним способом думать об этом может быть абстрактный абстрактный базовый класс. Если бы эта функция существовала, вы бы не думали об этом как о генерируемых интерфейсах, а именно о том, что, например, переменная типа List<>
может, конечно, провести любой общий список, например List<int>
или List<MyElement>
, и тогда вы можете называть его вещами, как Count
, Clear()
, Capacity
и т. д., потому что им не нужны знания типа T
.
Просто, чтобы понять, почему это не обсуждение нить, но вопрос с четким ответом:
Мой вопрос, есть ли недостаток в самой идее, что делает его несовместимым с типом-безопасности или аналогично, или нет фундаментальных недостатков в нем.
Пример использования:
У меня есть общий класс, который содержит и некоторые данные, которые зависят от общего типа и некоторых других данных, которые не делают. И у меня есть код, который я хочу использовать повторно, который может манипулировать не общей частью данных. В настоящее время я могу сделать это только путем определения интерфейса, который имеет те же элементы, что и мой общий класс (минус члены, которые используют общие параметры или возвращаемые значения). Определить этот интерфейс представляется излишним, когда я не собираюсь иметь более одной реализации. Языковая функция, где то же самое можно было бы сделать без указания дополнительного интерфейса, потому что необходимая информация уже находится в самом общем классе, была бы удобна для этого случая.
Для простых случаев общий класс базового класса с общим классом является общим подходом. Однако, если MyClass<T>
уже унаследовано от MyBaseClass<T>
, то размещение не общего класса между ними невозможно, и только интерфейс может быть использован.
Я читал ваш вопрос три раза, и я до сих пор абсолютно не знаю, о чем вы спрашиваете. –
Согласен, что вы спрашиваете? –
Я спрашиваю, может ли такая функция концептуально правдоподобна для добавления в C#, или если есть фундаментальные недостатки в идее, что означает, что такая функция языка никогда не будет добавлена в C#. – runevision