0

私の質問は、Generics (C#) がどのように正確にコンパイルされるかに関するものです。

コードサンプル

public class MyClass<Foo>
{
    public void MyMethod(Foo test)
    {

    }
}

質問

  1. Foo型はMyMethod具象型としてコンパイルされますか? これには、同じクラスの複数のバージョンを作成する必要があるのではないのではないかと思います (異なる型でインスタンス化する必要があります)。
  2. 低レベルでは、ジェネリックはどのように実装されていますか? クラス/メソッドに対する一般的な値は、特別な隠しフィールドとして保存されていますか?

私の仮定は間違っていると思いますが、舞台裏の内部の仕組みを感じようとしています.

アップデート

この記事を正しく理解していれば、IL の新しいクラスは実行時に具象型で作成されます。

その結果、ランタイムはジェネリック型の別のバージョンを生成し、MSIL の適切な場所で long に置き換えます。特殊化された各ジェネリック クラスには値の型がネイティブに含まれているため、変換は不要になりました。

https://msdn.microsoft.com/en-us/library/f4a6ta2h.aspx

4

0 に答える 0