こんにちわ、Unityエンジニアのオオバです。

自分が書いたC#コードはdllにコンパイルされる前に変換処理が入ります。
どのような形でDLLにされているのか気になると思いますので、MonoDevelopで確認してみます。

自分の書いたC#がどのようにコンパイルされてDLLになっているのかを確認する方法_21

View > Pads > SolutionからSolutionパネルを開きます。

自分の書いたC#がどのようにコンパイルされてDLLになっているのかを確認する方法_26

Assembly-CSharp/Referencesフォルダを右クリック。
Edit References...を選択します。

自分の書いたC#がどのようにコンパイルされてDLLになっているのかを確認する方法_31

.Net Assemblyタブをクリックして、下部のBrowseからdll選択ポップアップを表示させます。そしてLibrary/ScriptAssemblies/Assembly-CSharp.dllを追加します。

自分の書いたC#がどのようにコンパイルされてDLLになっているのかを確認する方法_35

先ほど追加したAssembly-CSharpをダブルクリックしてAssembly Browserを開きます。

自分の書いたC#がどのようにコンパイルされてDLLになっているのかを確認する方法_39

自分が書いたクラスを選択すると、コンパイルの際変換されたコードが表示されます。

サンプルコード

Before.cs

// 展開前  
using System.Collections;  
using System.Collections.Generic;  
using UnityEngine;  

public class Test : MonoBehaviour {  

    void Start (){  
        var list = new List<int> (){ 1, 2, 3, 4 };  
        foreach (var o in list)  
            Debug.Log (o);  
    }
}

After.cs

// 展開後  
using System.Collections;  
using System.Collections.Generic;  
using UnityEngine;  

public class Test : MonoBehaviour {  

    void Start (){  
        var list = new List<int> (){ 1, 2, 3, 4 };  
        foreach (var o in list)  
            Debug.Log (o);  
    }
}

上記のように変換されます。

サンプルコードではこのような処理をしてくれているようです。自分のコードがどのような変換をされているかを知ることで、コード最適化の材料になるかもしれません。

※プロダクトによっては表示されない処理が入っていることもあるため、あくまで自己責任でお願い致します。

追記

C#をコンパイルしたらILになって、それからIL2CPPで変換されるという流れ。「展開されたコード」というのはMonoDevelopが気を利かせてILを逆コンパイルした結果なので、実際のDLLの中身ではないです。 - matarillo のブックマーク / はてなブックマーク

このようコメントを頂きました。ありがとうございます!!ツッコミありがたいです。
たしかにiOSプラットフォームへビルドする際は、設定次第ですがIL2CPPという技術で

C#ILC++

という変換をします。
C++コードに変換されているので、この時点でDLLは存在しません。

本記事の展開されたコードというのは、あくまでC#がDLLにコンパイルされた時の、Monoコンパイラによるコードの変換を確認するというのが趣旨なので、実際のDLLの中身ということになると思います。 こちらC#のままではなくILになってDLL化されるとのことです。matarilloさんありがとうございました。

👉 オススメ記事

2021秋 Asset Refreshセール
100以上のアセットがなんと50%OFF!!オオバもいくつか買いました!
期間 : 10月2日午後3時59分まで

🙏 参考サイト