いいえ、以来、キャストは関与していませんList<T>
IS-A
IEnumerable<T>
。これは、キャストを必要としないポリモーフィズムを使用しています。
編集:ここに例があります:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
foo(new List<int>());
}
static void foo(IEnumerable<int> list) { }
}
ILMain
は次のとおりです。
.method private hidebysig static void Main() cil managed
{
.entrypoint
.maxstack 8
L_0000: nop
L_0001: newobj instance void [mscorlib]System.Collections.Generic.List`1<int32>::.ctor()
L_0006: call void Program::foo(class [mscorlib]System.Collections.Generic.IEnumerable`1<int32>)
L_000b: nop
L_000c: ret
}
ご覧のとおり、キャストは含まれていません。のインスタンスがList<T>
スタックにプッシュされ、foo
直後に呼び出されます。