Casting an object to a generic interface

后端 未结 3 1936
感情败类
感情败类 2020-12-09 15:43

I have the following interface:

internal interface IRelativeTo where T : IObject
{
    T getRelativeTo();
    void setRelativeTo(T relativeTo);
}
         


        
3条回答
  •  谎友^
    谎友^ (楼主)
    2020-12-09 16:30

    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);
    

提交回复
热议问题