自分が書いたC#コードはdllにコンパイルされる前に変換処理が入ります。
どのような形でDLLにされているのか気になると思いますので、MonoDevelopで確認してみます。
View
> Pads
> Solution
からSolutionパネルを開きます。
Assembly-CSharp/References
フォルダを右クリック。
Edit References...
を選択します。
.Net Assembly
タブをクリックして、下部のBrowse
からdll選択ポップアップを表示させます。そしてLibrary/ScriptAssemblies/Assembly-CSharp.dll
を追加します。
先ほど追加したAssembly-CSharp
をダブルクリックしてAssembly Browserを開きます。
自分が書いたクラスを選択すると、コンパイルの際変換されたコードが表示されます。
※VisibilityをAll members
、LanguageをC#
にすると見やすいです
サンプルコード
上記のように変換されます。
- 不要なusing削除
- アクセス修飾子の補完(ここでは
private
) - varが適正な型へ置き換えられる
- ブレース(括弧)の補完
- インデントがスペースからタブへ
サンプルコードではこのような処理をしてくれているようです。自分のコードがどのような変換をされているかを知ることで、コード最適化の材料になるかもしれません。
※プロダクトによっては表示されない処理が入っていることもあるため、あくまで自己責任でお願い致します。
追記
自分の書いたC#がどのように展開されるのかを確認する方法 - 渋谷ほととぎす通信C#をコンパイルしたらILになって、それからIL2CPPで変換されるという流れ。「展開されたコード」というのはMonoDevelopが気を利かせてILを逆コンパイルした結果なので、実際のDLLの中身ではないです。
2017/04/13 05:21
このようコメントを頂きました。ありがとうございます!!ツッコミありがたいです。
たしかにiOSプラットフォームへビルドする際は、設定次第ですがIL2CPPという技術で
C#
→ IL
→ C++
という変換をします。 C++コードに変換されているので、この時点でDLLは存在しません。
本記事の展開されたコードというのは、あくまでC#がDLLにコンパイルされた時の、Monoコンパイラによるコードの変換を確認するというのが趣旨なので、実際のDLLの中身ということになると思います。 こちらC#のままではなくIL
になってDLL化されるとのことです。matarilloさんありがとうございました。
※展開というキーワード紛らわしいのでタイトル、本文を若干修正しましたorz
参考