Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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>
- IRelativeTo<IObject> = getObjectThatImplementsRelativeTo(); // returns Object
- internal interface IRelativeTo
- {
- object getRelativeTo(); // or maybe something else non-generic
- void setRelativeTo(object relativeTo);
- }
- internal interface IRelativeTo<T> : IRelativeTo
- where T : IObject
- {
- new T getRelativeTo();
- new void setRelativeTo(T relativeTo);
- }
- void DoSomething<T>() where T : IObject
- {
- IRelativeTo<IObject> foo = // etc
- }
- DoSomething(foo);
- DoSomething<SomeType>(foo);
- void MyFunction<T>(IRelativeTo<T> sth) where T : IObject
- {}
- interface IRelativeTo
- {
- IObject getRelativeTo();
- void setRelativeTo(IObject relativeTo)
- }
- abstract class RelativeTo<T> : 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<AdminRateShift>, IObject {}
- IRelativeTo irt = new AdminRateShift();
- IObject o = irt.getRelativeTo();
- irt.setRelativeTo(o);
Add Comment
Please, Sign In to add comment