暴露泛型重载的接口.如何在这里擦干

本文关键字:在这里 接口 泛型 重载 暴露 | 更新日期: 2023-09-27 18:10:31

我有这个接口

interface IMyInterface 
{
    object Create(Type t);
}

为方便起见,我还将包含一个泛型重载来包装对该方法的调用,因此它变成:

interface IMyInterface 
{
    object Create(Type t);
    T Create<T>();
}

新方法将像这样实现

public object Create<T>()  
{
    return (T) Create(typeof(T)); 
}

方法的问题:

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

如何解决这个设计问题?

暴露泛型重载的接口.如何在这里擦干

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

public static MyInterfaceExtensions
{
    public T Create<T>(this IMyInterface target)  
    {
        return (T) target.Create(typeof(T)); 
    }
}

扩展方法可以像普通方法一样调用。