C#のLinkedList<T>について質問があります。
LinkedList<T>のメタデータを見ると、ICollection<T>やIEnumerable<T>を継承していて、
ICollection<T>を見るとvoid Add(T item)などがあります。
ところが、LinkedList<T>をいくら調べてもvoid Add(T item)が実装されておらず、実際、その関数を使おうとするとエラーになります。
しかし、一度ICollection<T>にキャストすればvoid Add(T item)が使えてしまいます。
lang
1using System; 2using System.Collections.Generic; 3namespace Sample 4{ 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 var list = new LinkedList<string>(); 10 list.AddLast("aaa"); 11 list.AddLast("bbb"); 12 list.AddLast("ccc"); 13 foreach (var str in list) Console.WriteLine(str); 14 15 Console.WriteLine("hogeを追加します。"); 16 // list.Add("hoge"); // これはエラー 17 ICollection<string> tmp = list; 18 tmp.Add("hoge"); 19 foreach (var str in list) Console.WriteLine(str); 20 } 21 } 22}
上のプログラムで実験してみると、ICollection<T>にキャストした状態ではvoid Add(T item)は
LinkedList<T>のAddLast(T item)として動作していることが分かります。
どうしてこのようなことが起こるのでしょうか。Addを実装せずにICollection<T>を
継承できるはずがないと思うのですが…??
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/07/07 03:45