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

时间:2015-08-31 18:45:50

标签: c# .net generics interface

我有这个界面

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的傻包装方法 SAME。
  • 如果我不包含超载,则在使用IMyInteface
  • 的引用时,调用功能会丢失

如何解决此设计问题?

1 个答案:

答案 0 :(得分:12)

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

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<link href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css" rel="stylesheet" type="text/css">

<ul id="selectable">
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
  <li>Item 4</li>
  <li>Item 5</li>
</ul>

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