У меня есть следующий интерфейс:
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, поэтому я могу его использовать.
Это тривиальный пример, но я надеюсь, что он прояснит то, что я пытаюсь сделать.