C#重载返回类型 - 推荐方法

时间:2013-05-23 19:32:21

标签: c# .net overloading return-type

我有一种情况,我只希望返回类型对于方法重载是不同的,但你不能在C#中这样做。

处理此问题的最佳方法是什么?事实是我需要这个意味着我的程序结构存在缺陷吗?

鉴于在C#中这是不可能的,推荐的方法是什么?

4 个答案:

答案 0 :(得分:20)

通常,您只需为方法指定不同的名称。

此示例包括IDataReader GetInt32GetInt64等。

说实话,我相信这通常会让你更清楚你要做的事情 - 特别是如果你那时调用一个带有结果的重载方法:

Console.WriteLine(reader.GetInt32()); // This is clear

Console.WriteLine(foo.OverloadedGet()); // Which overload of OverloadedGet?

答案 1 :(得分:8)

  

鉴于在C#中这是不可能的,推荐的方法是什么?

这取决于你为什么需要这个。

最常见的方法是使用不同的名称。在许多情况下,框架会执行此操作,例如Convert class

如果要支持多种类型,可以通过通用方法执行此操作:

T SomeMethod<T>()
  // Optionally add constraints:"
  where T : IFoo
{

通用方法方法对于repostories是常见的,因为通常存在“Entity”类型的基类。

答案 2 :(得分:2)

您可以使用另一个参数指定返回类型。

public static T[] Method1<T>(int i, T type)
{
    return new T[i];
}

答案 3 :(得分:1)

我已经发布了答案,但这是另一种方式:使用object

object TheMethod(MyEnum type)
{
    if (type == MyEnum.A) return (object)SubMethod1();
    else if (type == MyEnum.B) return (object)SubMethod2();
    //...
}

int SubMethod1() { return 1; }
string SubMethod2() { return "a"; }

并将结果转换为适当的类型。