У меня есть следующий интерфейс:
internal interface IRelativeTo<T> where T : IObject
{
T getRelativeTo();
void setRelativeTo(T relativeTo);
}
и набор классов, которые (должны) реализовать его, например:
public class AdminRateShift : IObject, IRelativeTo<AdminRateShift>
{
AdminRateShift getRelativeTo();
void setRelativeTo(AdminRateShift shift);
}
Я понимаю, что эти три не совпадают:
IRelativeTo<>
IRelativeTo<AdminRateShift>
IRelativeTo<IObject>
но, тем не менее, мне нужен способ работать со всеми различными классами, такими как AdminRateShift (и FXRateShift, DetRateShift), которые должны реализовать IRelativeTo. Скажем, у меня есть функция, которая возвращает AdminRateShift как объект:
IRelativeTo<IObject> = getObjectThatImplementsRelativeTo(); // returns Object
Программируя интерфейс, я могу сделать то, что мне нужно, но я не могу на самом деле отбросить объект в IRelativeTo, чтобы я мог его использовать.
Это тривиальный пример, но я надеюсь, что он разъяснит, что я пытаюсь сделать.