c#重载返回类型——推荐的方法
本文关键字:方法 返回类型 重载 | 更新日期: 2023-09-27 18:15:17
我有一种情况,我只想让方法重载的返回类型不同,但你不能在c#中这样做。
处理这个问题的最好方法是什么?我需要这个意味着我的程序结构有缺陷吗?
考虑到这在c#中是不可能的,推荐的方法是什么?
通常您只需给这些方法起不同的名字。
一个例子是IDataReader
与GetInt32
, 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"; }
并将结果强制转换为适当的类型