11

メソッドのオーバーロードで戻り値の型を変更したいという状況がありますが、C# ではこれを行うことはできません。

これを処理する最良の方法は何ですか? 私がこれを必要とするという事実は、私のプログラム構造に欠陥があることを意味しますか?

これが C# では不可能であるという事実を考えると、推奨されるアプローチは何ですか?

4

4 に答える 4

22

通常、メソッドに異なる名前を付けるだけです。

この例はIDataReader、などGetInt32です。GetInt64

正直なところ、これにより通常、とにかく何をしようとしているのかが明確になると思います-特に、結果でオーバーロードされたメソッドを呼び出している場合:

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

Console.WriteLine(foo.OverloadedGet()); // Which overload of OverloadedGet?
于 2013-05-23T19:34:26.750 に答える
9

これが C# では不可能であるという事実を考えると、推奨されるアプローチは何ですか?

なぜこれが必要なのかによって異なります。

最も一般的なアプローチは、単に別の名前を使用することです。フレームワークは、 Convert クラスなど、多くの場合にこれを行います。

複数の型をサポートしたい場合は、ジェネリック メソッドを使用してこれを行うことができます。

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

ジェネリック メソッド アプローチは、"エンティティ" 型の基本クラスが存在することが一般的であるため、リポジトリでは一般的です。

于 2013-05-23T19:33:46.943 に答える
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"; }

そして、結果を適切な型にキャストします。

于 2013-05-23T20:55:35.447 に答える