Я хочу сделать что-то, что я делал раньше в Java, но нужно сделать в C#.Создание объектов класса массива
код в Java, которые были бы похожи на:
public Class<? extends Thing>[] classes = new Class<? extends Thing>[3] {
OneThing.class,
AnotherThing.class
YetAnotherThing.class
// etc.
}
Возможно ли это в C# в любом случае? В конечном итоге то, что я пытаюсь сделать, это иметь массив классов, представляющих типы элементов. Затем этот массив используется для проверки типа элемента для создания логического значения, представляющего, если элемент имеет суперкласс индекса в массиве. Чтобы уточнить, я проверяю, чтобы увидеть, если класс экземпляра Thing
также экземпляр OneThing
, AnotherThing
и т.д.
Важно то, что я пытаюсь создать массив не регулярный объекта например, Random
, но все, что C# является эквивалентом класса Java Class
.
Если я помню правильно Java (и я бы не), вы пытаетесь объявить массив _type_ случаев, когда каждый тип наследует базовый тип 'Thing'. Верный? Если это так, то я не думаю, что для этого допускается общая система ограничений C#. То есть он может сдерживать тип, основанный на том, что он наследует, но не может ограничивать _instance_ 'Type', чтобы выполнить то же самое. Вместо этого вам нужно будет внедрить что-то, что обеспечит это во время выполнения. –
@PeterDuniho То, что я пытаюсь сделать, это создать массив классов, где каждый класс является дочерним элементом 'Thing'. Я проверяю, действительно ли фактический класс объекта (который в какой-то мере является «Вещь») является дочерним по отношению к классу, указанному индексом, который также передается функции (не показан). – Treyzania
Хорошо, поэтому я правильно понял. В этом случае я думаю, что наиболее близким вам может быть пользовательский класс-оболочка с ограничением «где T: Тип», а затем внутренним образом принуждает ограничение T быть экземпляром 'Type', представляющим фактический тип, который наследует' Thing'. Я бы поставил пример в качестве ответа, но я бы предпочел не отговаривать экспертов по дженерикам C# от взвешивания. Я с радостью сделаю это через 12-24 часа, если никто еще не имеет. –