c#重载返回类型——推荐的方法

本文关键字:方法 返回类型 重载 | 更新日期: 2023-09-27 18:15:17

我有一种情况,我只想让方法重载的返回类型不同,但你不能在c#中这样做。

处理这个问题的最好方法是什么?我需要这个意味着我的程序结构有缺陷吗?

考虑到这在c#中是不可能的,推荐的方法是什么?

c#重载返回类型——推荐的方法

通常您只需给这些方法起不同的名字。

一个例子是IDataReaderGetInt32, GetInt64等。

老实说,我相信这通常会使你想做的事情更清楚——特别是当你在调用一个重载方法时,结果是:

Console.WriteLine(reader.GetInt32()); // This is clear
Console.WriteLine(foo.OverloadedGet()); // Which overload of OverloadedGet?

考虑到这在c#中是不可能的,推荐的方法是什么?

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

最常见的方法是使用不同的名称。框架在很多情况下都是这样做的,比如Convert类。

如果你想支持多种类型,你可以通过泛型方法来实现:

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

泛型方法方法在存储库中很常见,因为它通常有一个"Entity"类型的基类。

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

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

我已经发布了一个答案,但这里有另一种方法:使用object 's。

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"; }

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