I have the following interface:
internal interface IRelativeTo where T : IObject
{
T getRelativeTo();
void setRelativeTo(T relativeTo);
}
If all you care about is that IRelativeTo deals with IObjects then you don't need to make it generic:
interface IRelativeTo
{
IObject getRelativeTo();
void setRelativeTo(IObject relativeTo)
}
The implementing classes may still be generic, however:
abstract class RelativeTo : IRelativeTo where T : IObject
{
public virtual T getRelativeTo() {return default(T);}
public virtual void setRelativeTo(T relativeTo) {}
IObject IRelativeTo.getRelativeTo() {return this.getRelativeTo(); }
void IRelativeTo.setRelativeTo(IObject relativeTo)
{ this.setRelativeTo((T) relativeTo);
}
}
class AdminRateShift : RelativeTo, IObject {}
Then you can do this:
IRelativeTo irt = new AdminRateShift();
IObject o = irt.getRelativeTo();
irt.setRelativeTo(o);