私の質問は、Generics (C#) がどのように正確にコンパイルされるかに関するものです。
コードサンプル
public class MyClass<Foo>
{
public void MyMethod(Foo test)
{
}
}
質問
- の
Foo
型はMyMethod
具象型としてコンパイルされますか? これには、同じクラスの複数のバージョンを作成する必要があるのではないのではないかと思います (異なる型でインスタンス化する必要があります)。 - 低レベルでは、ジェネリックはどのように実装されていますか? クラス/メソッドに対する一般的な値は、特別な隠しフィールドとして保存されていますか?
私の仮定は間違っていると思いますが、舞台裏の内部の仕組みを感じようとしています.
アップデート
この記事を正しく理解していれば、IL の新しいクラスは実行時に具象型で作成されます。
その結果、ランタイムはジェネリック型の別のバージョンを生成し、MSIL の適切な場所で long に置き換えます。特殊化された各ジェネリック クラスには値の型がネイティブに含まれているため、変換は不要になりました。