C#接口规定了一个通用返回类型

20

我有一个类似于以下的东西:

public interface IExample
{
  int GetInteger()
  T GetAnything(); //How do I define a function with a generic return type???
^^^^^
}

这是否可能?
3个回答

61
如果整个界面应该是通用的:
public interface IExample<T>
{
  int GetInteger();
  T GetAnything();
}

如果只需要方法是通用的:
public interface IExample
{
  int GetInteger();
  T GetAnything<T>();
}

3
我完全忘记了方法可以有自己的类型参数 :) - user925777
2
如果使用.NET 4.0,最好尽可能使用协变:public interface IExample<out T>,T GetAnything<out T>(); - dvvrd
2
我该如何实现接口函数呢? - River
2
请注意,如果整个接口是通用的,则实现它的类可以是具有相同类型参数的通用类,或者必须显式地实现接口以支持它应该支持的任何类型。 在前一种情况下,要使GetAnything返回类型为Foo,必须有一个ClassImplementingIExample<Foo> - supercat

6
public interface IExample<T>
{
   int GetInteger()
   T GetAnything();
}

泰达!

或者,你可以直接返回System.Object,并将其转换为你想要的类型。


5
这听起来很丑陋 - 返回一个 System.Object 并将其转换为你想要的类型。 - sll
不要认为这就是他所询问的。 - NominSim

3
如果你不想让整个接口(IExample)都是泛型的,那么你也可以这样做。
public interface IExample
{
  int GetInteger();
  T GetAnything<T>();     
}

3
只是为了澄清,如果您在接口中这样声明方法,在实现接口的类中实现它时,您必须将其保留为通用方法,并且只能在从实现接口的类实例化的对象上调用该方法时指定其类型,而不能在类本身中指定。 - daleotar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接