8

したがって、これら2つのメソッドの署名は同じですが、制約が異なります。

public static void Method<T>(ref T variable) where T : struct { }

public static void Method<T>(ref T variable) where T : class { }

ただし、同じ署名を持っているため、単一のクラスで定義することはできません。ただし、この特定のケースでは、これらは相互に排他的です。(私がそれについて間違っていない限り)

class他に追加の制約を設定できることは理解していますが、両方を同じメソッドでstruct指定することはできません。では、なぜこれがコンパイルに失敗するのでしょうか?structclass

4

3 に答える 3

10

ジェネリック制約はメソッドシグネチャの一部とは見なされません(リンクを提供してくれた@Anthonyに感謝します)。

コンパイラーに関する限り、メソッドが重複しています。同じ数とタイプのパラメーターです。

于 2012-06-14T19:39:06.223 に答える
4

はい、それらは意味的に相互に排他的です。しかし、コンパイラーはそれらを同じ「名前」を持っていると見なしているため、あいまいさを感じます。ここでの「名前」は「メソッドシグネチャ」を意味します。

于 2012-06-14T19:39:24.457 に答える
4

コンパイラーはそれを理解するのに十分賢いかもしれませんが(そうではないように見えます)、あなたは何をすべきかわかりません(objectそれはまたはである可能性があります)。classstruct

于 2012-06-14T19:39:53.680 に答える