1

次のコードがあります。常に「take(ICollection a)」メソッドに行くのはなぜですか? それ自体のオブジェクトはLinkedListまたはHashSetであるべきだと思うので、他の2つのtakeメソッドを呼び出す必要があります。

class Program
{
    static void Main(string[] args)
    {
        Program p = new Program();

        ICollection<String>[] ary = { new LinkedList<String>(), new HashSet<String>() };

        foreach (ICollection<String> a in ary)
        {
            p.take(a);
        }

        for (int i = 0; i < ary.Length; i++)
        {
            p.take(ary[i]);
        }
    }


    public void take(HashSet<String> a)
    { }

    public void take(LinkedList<String> a)
    {}

    public void take(ICollection<string> a)
    { }
}
4

2 に答える 2

2

参照: http://msdn.microsoft.com/en-us/library/aa691336(v=vs.71).aspx

そしてhttp://msdn.microsoft.com/en-us/library/aa691338(v=vs.71).aspx

MSDN から:

引数の型のセット {A1, A2, ..., AN} を持つ引数リスト A と、パラメーターの型 {P1, P2, ..., PN} と {Q1, Q2, ..., QN}, 次の場合、MP は MQ よりも優れた関数メンバーであると定義されます。

  • 各引数について、AX から PX への暗黙的な変換は、AX から QX への暗黙的な変換より悪くはありません。
  • 少なくとも 1 つの引数について、AX から PX への変換は、AX から QX への変換よりも優れています。

この評価を実行するときに、MP または MQ が展開された形式で適用できる場合、PX または QX はパラメーター リストの展開された形式のパラメーターを参照します。

于 2013-09-05T16:17:23.353 に答える