3

これを仮定します:

public class GenericMethods
{
    public T Method<T>() where T : struct
    {
        // Do something specific to a struct
    }

    public T Method<T>() where T : class
    {
        // Do something specific to a class
    }
}

2 つのメソッドが同じパラメーターを取るため、コンパイル時に何らかの形で無効になります。しかし、制約が相互に排他的であるため、2 つの方法が衝突する瞬間が本当にあるのでしょうか? T を解決しているときに、ソフトウェアが 2 つの方法のいずれかを選択できない可能性はありますか?

ジェネリック型が構造体またはクラスである場合に異なる、同じ名前とパラメーターの 2 つのジェネリック メソッドを作成するにはどうすればよいでしょうか?

4

2 に答える 2

4

いいえ。制約は考慮されません。どちらも戻り型ではありません。これはコンパイルされず、正当な C# ではありません。

これは、C# 言語仕様の 3.6 に記載されています。

メソッドのシグネチャには、戻り値の型、一番右のパラメーターに指定できる params 修飾子、オプションの型パラメーターの制約は含まれません。

2 つのメソッドは "論理的に" 区別されており、競合することはありませんが、制約によってどちらが呼び出されているかが明確になるはずですが、C# 言語はこれをサポートしていません。言語設計者は、これが C# のルールを実装するために選択した方法であると判断しました。

于 2012-10-30T16:48:48.743 に答える
-1

また、次のような方法もあるかもしれません

 public MyClass Method<T>() 
    {
        // Do something specific to a myclass
    }

そのため、コンパイラには明確な選択肢がありません。

于 2012-10-30T16:56:52.890 に答える