Интерфейс C# с ограничением базового классаC#

Место общения программистов C#
Anonymous
Интерфейс C# с ограничением базового класса

Сообщение Anonymous »

Я использую существующую библиотеку классов, которую не могу изменить (Godot, если это имеет значение), и у меня есть свои собственные классы, которые являются продолжением классов в этой библиотеке.
Мои классы не все будут расширять один и тот же класс в библиотеке, но у них будет общий класс-предок в этой библиотеке.
Я хочу написать несколько служебных методов, которые принимают некоторые из моих классов и вызывают методы в общем базовом классе.
Добавить интерфейс для общих методов в моих классах достаточно легко, но тогда я не могу также «требовать», чтобы тип имел общего предка.
Например, у меня может быть следующая иерархия:

Код: Выделить всё

Node (API class)
|
+-Node2D (API class)
|
+-RigidBody2D (API class)
| |
| +-MyClassA : ICommon (My custom class and interface)
|
+-Area2D (API class)
|
+-MyClassB : ICommon (My custom class and interface)
Тогда мне нужен метод, который использует ICommon, но требует, чтобы он также расширял Node2D
В настоящее время это единственный способ, которым я могу можно подумать, что можно сделать это, используя дженерики, например:

Код: Выделить всё

void T MyMethod(T arg) where T : Node2D, ICommon
но это кажется очень громоздким и не работает, если нужно вернуть другой тип (который по-прежнему имеет ограничение: Node2D и ICommon).
Это также не работает, если я хочу использовать смешанный массив классов, например:

Код: Выделить всё

void T[] OtherMethod(T[] arg) where T : Node2D, ICommon
потребует, чтобы массив принадлежал к одному и тому же классу — у меня не может быть массива, сочетающего MyClassA и MyClassB.Есть ли лучший способ справиться с этим?

Подробнее здесь: https://stackoverflow.com/questions/788 ... estriction

Вернуться в «C#»