暴露泛型过载的接口.怎么在这里干?

Sup*_*JMN 2 .net c# generics interface

我有这个界面

interface IMyInterface 
{
    object Create(Type t);
}
Run Code Online (Sandbox Code Playgroud)

为方便起见,我还会包含一个包含调用方法的泛型重载,因此它变为:

interface IMyInterface 
{
    object Create(Type t);
    T Create<T>();
}
Run Code Online (Sandbox Code Playgroud)

新方法将像这样实现

public object Create<T>()  
{
    return (T) Create(typeof(T)); 
}
Run Code Online (Sandbox Code Playgroud)

方法的问题:

  • 如果在接口中包含重载,那么我强制实现者有一个总是相同的愚蠢的包装方法.
  • 如果我不包含重载,则在使用引用时会丢失调用的能力IMyInteface

我该如何解决这个设计问题?

Gro*_*kys 12

最好的解决方案是使用扩展方法:

public static MyInterfaceExtensions
{
    public T Create<T>(this IMyInterface target)  
    {
        return (T) target.Create(typeof(T)); 
    }
}
Run Code Online (Sandbox Code Playgroud)

然后可以像常规方法一样调用扩展方法.