Suche senden
Hochladen
真Intermediate languageのキホン
•
0 gefällt mir
•
8,377 views
Kouji Matsui
Folgen
Intermediate Language Basics - The final. http://www.kekyo.net/2016/03/22/5710
Weniger lesen
Mehr lesen
Software
Melden
Teilen
Melden
Teilen
1 von 31
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
Hello! intermediate language
Hello! intermediate language
Kouji Matsui
式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式
Kouji Matsui
.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み
Kouji Matsui
Async deepdive before de:code
Async deepdive before de:code
Kouji Matsui
Nespのコード生成
Nespのコード生成
Kouji Matsui
C#でわかる こわくないMonad
C#でわかる こわくないMonad
Kouji Matsui
メタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらば
Kouji Matsui
Thread affinity and CPS
Thread affinity and CPS
Kouji Matsui
Empfohlen
Hello! intermediate language
Hello! intermediate language
Kouji Matsui
式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式
Kouji Matsui
.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み
Kouji Matsui
Async deepdive before de:code
Async deepdive before de:code
Kouji Matsui
Nespのコード生成
Nespのコード生成
Kouji Matsui
C#でわかる こわくないMonad
C#でわかる こわくないMonad
Kouji Matsui
メタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらば
Kouji Matsui
Thread affinity and CPS
Thread affinity and CPS
Kouji Matsui
Final LINQ extensions III
Final LINQ extensions III
Kouji Matsui
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
Kouji Matsui
Win32 APIをてなずけよう
Win32 APIをてなずけよう
Kouji Matsui
continuatioN Linking
continuatioN Linking
Kouji Matsui
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
Takaaki Suzuki
ぼくのNode.jsのだいいっぽ
ぼくのNode.jsのだいいっぽ
拓弥 遠藤
IDEALIZE YOU
IDEALIZE YOU
佑介 九岡
WebStormでできること
WebStormでできること
kamiyam .
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
Jun-ichi Sakamoto
TypeScript超入門
TypeScript超入門
Narami Kiyokura
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
Narami Kiyokura
この実装には問題がある!
この実装には問題がある!
GOMI NINGEN
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
Yoshitaka Kawashima
リアルビジネスRuby
リアルビジネスRuby
Tomoya Kawanishi
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6
信之 岩永
Lt 110416
Lt 110416
Tomoyuki Obi
KotlinでWebアプリ開発
KotlinでWebアプリ開発
Ryo Nakagawa
TypeScript補完計画 for Sublime Text 2
TypeScript補完計画 for Sublime Text 2
kamukiriri
TypeScriptはいいぞ
TypeScriptはいいぞ
Jun Suzuki
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
慎一 古賀
SIMD.js(ECMAScript 7)
SIMD.js(ECMAScript 7)
Hiroshi Kawada
Soramame.Block 100行のJavaScriptで ビジュアルプログラミング言語(のフロントエンド)を作ってみた:
Soramame.Block 100行のJavaScriptで ビジュアルプログラミング言語(のフロントエンド)を作ってみた:
Yutaka Kachi
Weitere ähnliche Inhalte
Was ist angesagt?
Final LINQ extensions III
Final LINQ extensions III
Kouji Matsui
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
Kouji Matsui
Win32 APIをてなずけよう
Win32 APIをてなずけよう
Kouji Matsui
continuatioN Linking
continuatioN Linking
Kouji Matsui
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
Takaaki Suzuki
ぼくのNode.jsのだいいっぽ
ぼくのNode.jsのだいいっぽ
拓弥 遠藤
IDEALIZE YOU
IDEALIZE YOU
佑介 九岡
WebStormでできること
WebStormでできること
kamiyam .
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
Jun-ichi Sakamoto
TypeScript超入門
TypeScript超入門
Narami Kiyokura
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
Narami Kiyokura
この実装には問題がある!
この実装には問題がある!
GOMI NINGEN
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
Yoshitaka Kawashima
リアルビジネスRuby
リアルビジネスRuby
Tomoya Kawanishi
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6
信之 岩永
Lt 110416
Lt 110416
Tomoyuki Obi
KotlinでWebアプリ開発
KotlinでWebアプリ開発
Ryo Nakagawa
TypeScript補完計画 for Sublime Text 2
TypeScript補完計画 for Sublime Text 2
kamukiriri
TypeScriptはいいぞ
TypeScriptはいいぞ
Jun Suzuki
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
慎一 古賀
Was ist angesagt?
(20)
Final LINQ extensions III
Final LINQ extensions III
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
Win32 APIをてなずけよう
Win32 APIをてなずけよう
continuatioN Linking
continuatioN Linking
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
ぼくのNode.jsのだいいっぽ
ぼくのNode.jsのだいいっぽ
IDEALIZE YOU
IDEALIZE YOU
WebStormでできること
WebStormでできること
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
TypeScript超入門
TypeScript超入門
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
この実装には問題がある!
この実装には問題がある!
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
リアルビジネスRuby
リアルビジネスRuby
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6
Lt 110416
Lt 110416
KotlinでWebアプリ開発
KotlinでWebアプリ開発
TypeScript補完計画 for Sublime Text 2
TypeScript補完計画 for Sublime Text 2
TypeScriptはいいぞ
TypeScriptはいいぞ
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
Ähnlich wie 真Intermediate languageのキホン
SIMD.js(ECMAScript 7)
SIMD.js(ECMAScript 7)
Hiroshi Kawada
Soramame.Block 100行のJavaScriptで ビジュアルプログラミング言語(のフロントエンド)を作ってみた:
Soramame.Block 100行のJavaScriptで ビジュアルプログラミング言語(のフロントエンド)を作ってみた:
Yutaka Kachi
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
典子 松本
マーケティングオートメーション&Mauticとは(WordBench Nagoya 2017年2月勉強会)
マーケティングオートメーション&Mauticとは(WordBench Nagoya 2017年2月勉強会)
takashi ono
解り方と教え方
解り方と教え方
健人 井関
Letsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous Delivery
Nobuhiro Sue
20101127 Android Usability Seminar
20101127 Android Usability Seminar
Visso株式会社
WordPressの進化とWordPress名古屋コミュニティの進化
WordPressの進化とWordPress名古屋コミュニティの進化
takashi ono
フロントエンドというカオスな世界について
フロントエンドというカオスな世界について
mikakane
HTML と CSS の社内勉強会を主催した話
HTML と CSS の社内勉強会を主催した話
suno88
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
parrotstudio
Microsoft機械学習の簡単な紹介
Microsoft機械学習の簡単な紹介
A AOKI
プログラミングの学習方法 | How To Learn The Programming 14.05.31 WP-D Fes #02 Interviews ...
プログラミングの学習方法 | How To Learn The Programming 14.05.31 WP-D Fes #02 Interviews ...
Yoshinori Kobayashi
Lync でできる? 仕事効率化
Lync でできる? 仕事効率化
Manato KAMEYA
AIがビジネスを変える! ゑびやなど事例から学ぶマイクロソフトのAI技術とビジネスでの活用
AIがビジネスを変える! ゑびやなど事例から学ぶマイクロソフトのAI技術とビジネスでの活用
Microsoft Azure Japan
C言語講習会資料(前半)
C言語講習会資料(前半)
Yuki Sako
ひとまずHoloLensと自分の周辺技術(WEB・IoT)と混ぜた話
ひとまずHoloLensと自分の周辺技術(WEB・IoT)と混ぜた話
Seigo Tanaka
くらう道 オフライン道場 ~ Azure インフルエンサー養成講座 ~
くらう道 オフライン道場 ~ Azure インフルエンサー養成講座 ~
Takashi Ushigami
Rubyist started to learn Groovy - things important to leran new LL
Rubyist started to learn Groovy - things important to leran new LL
Uchio Kondo
Trailheadでサクサク!新人研修
Trailheadでサクサク!新人研修
Satoru Ishikawa
Ähnlich wie 真Intermediate languageのキホン
(20)
SIMD.js(ECMAScript 7)
SIMD.js(ECMAScript 7)
Soramame.Block 100行のJavaScriptで ビジュアルプログラミング言語(のフロントエンド)を作ってみた:
Soramame.Block 100行のJavaScriptで ビジュアルプログラミング言語(のフロントエンド)を作ってみた:
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
マーケティングオートメーション&Mauticとは(WordBench Nagoya 2017年2月勉強会)
マーケティングオートメーション&Mauticとは(WordBench Nagoya 2017年2月勉強会)
解り方と教え方
解り方と教え方
Letsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous Delivery
20101127 Android Usability Seminar
20101127 Android Usability Seminar
WordPressの進化とWordPress名古屋コミュニティの進化
WordPressの進化とWordPress名古屋コミュニティの進化
フロントエンドというカオスな世界について
フロントエンドというカオスな世界について
HTML と CSS の社内勉強会を主催した話
HTML と CSS の社内勉強会を主催した話
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
Microsoft機械学習の簡単な紹介
Microsoft機械学習の簡単な紹介
プログラミングの学習方法 | How To Learn The Programming 14.05.31 WP-D Fes #02 Interviews ...
プログラミングの学習方法 | How To Learn The Programming 14.05.31 WP-D Fes #02 Interviews ...
Lync でできる? 仕事効率化
Lync でできる? 仕事効率化
AIがビジネスを変える! ゑびやなど事例から学ぶマイクロソフトのAI技術とビジネスでの活用
AIがビジネスを変える! ゑびやなど事例から学ぶマイクロソフトのAI技術とビジネスでの活用
C言語講習会資料(前半)
C言語講習会資料(前半)
ひとまずHoloLensと自分の周辺技術(WEB・IoT)と混ぜた話
ひとまずHoloLensと自分の周辺技術(WEB・IoT)と混ぜた話
くらう道 オフライン道場 ~ Azure インフルエンサー養成講座 ~
くらう道 オフライン道場 ~ Azure インフルエンサー養成講座 ~
Rubyist started to learn Groovy - things important to leran new LL
Rubyist started to learn Groovy - things important to leran new LL
Trailheadでサクサク!新人研修
Trailheadでサクサク!新人研修
Mehr von Kouji Matsui
Making archive IL2C #6-55 dotnet600 2018
Making archive IL2C #6-55 dotnet600 2018
Kouji Matsui
Matrix signal controller and BrainPad overview
Matrix signal controller and BrainPad overview
Kouji Matsui
Fun with BrainPad
Fun with BrainPad
Kouji Matsui
What's Functional?
What's Functional?
Kouji Matsui
Pitfall for WioLTE
Pitfall for WioLTE
Kouji Matsui
How to make the calculator
How to make the calculator
Kouji Matsui
Write common, run anywhere
Write common, run anywhere
Kouji Matsui
Locality of Reference
Locality of Reference
Kouji Matsui
You will be assimilated. Resistance is futile.
You will be assimilated. Resistance is futile.
Kouji Matsui
How to meets Async and Task
How to meets Async and Task
Kouji Matsui
Beachhead implements new opcode on CLR JIT
Beachhead implements new opcode on CLR JIT
Kouji Matsui
Async DeepDive basics
Async DeepDive basics
Kouji Matsui
不健康なIt戦士を健康的にするアレの話
不健康なIt戦士を健康的にするアレの話
Kouji Matsui
SourceTreeで始めよう! Gitへの乗り換え指南
SourceTreeで始めよう! Gitへの乗り換え指南
Kouji Matsui
Final LINQ Extensions II
Final LINQ Extensions II
Kouji Matsui
Final LINQ Extensions
Final LINQ Extensions
Kouji Matsui
ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級
Kouji Matsui
抽象太郎ものがたり そして伝説へ
抽象太郎ものがたり そして伝説へ
Kouji Matsui
プロ生ちゃんをひろっちゃう!
プロ生ちゃんをひろっちゃう!
Kouji Matsui
Mehr von Kouji Matsui
(19)
Making archive IL2C #6-55 dotnet600 2018
Making archive IL2C #6-55 dotnet600 2018
Matrix signal controller and BrainPad overview
Matrix signal controller and BrainPad overview
Fun with BrainPad
Fun with BrainPad
What's Functional?
What's Functional?
Pitfall for WioLTE
Pitfall for WioLTE
How to make the calculator
How to make the calculator
Write common, run anywhere
Write common, run anywhere
Locality of Reference
Locality of Reference
You will be assimilated. Resistance is futile.
You will be assimilated. Resistance is futile.
How to meets Async and Task
How to meets Async and Task
Beachhead implements new opcode on CLR JIT
Beachhead implements new opcode on CLR JIT
Async DeepDive basics
Async DeepDive basics
不健康なIt戦士を健康的にするアレの話
不健康なIt戦士を健康的にするアレの話
SourceTreeで始めよう! Gitへの乗り換え指南
SourceTreeで始めよう! Gitへの乗り換え指南
Final LINQ Extensions II
Final LINQ Extensions II
Final LINQ Extensions
Final LINQ Extensions
ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級
抽象太郎ものがたり そして伝説へ
抽象太郎ものがたり そして伝説へ
プロ生ちゃんをひろっちゃう!
プロ生ちゃんをひろっちゃう!
真Intermediate languageのキホン
1.
真 Intermediate Language のキホン 2016.3.19 第六回CENTER
CLR勉強会 KOUJI MATSUI (@KEKYO2)
2.
自己紹介 けきょ (@kekyo2) ロードバイク乗り Microsoft MVP
for Visual Studio and Development Technology 認定スクラムマスター・スクラムプロダクトオーナー Center CLRオーガナイザー
3.
ようこそ 最近、VRとか話題に上っておりますね。 私もGAME ONでプレステVR体感してきましたよ。 IBMとかなんちゃってSAOとかやってるようで、気合の入り方 が斜め上ですなぁ。 インサイド: http://www.inside-games.jp/article/2016/03/17/96944.html
4.
本日は それはさておき、本日はIntermediate Language(中間言語)の お話です。 「よく来たなひよっこどもよ」
5.
本日は ILは基礎的な学問でいう所の「算数」みたいなもので、とにか くやって理解するのが近しい。応用の事は2の次。 なので、 よく言えばワークショップ 悪く言えば算数ドリル
6.
はじめに
7.
導入 前回結構大変だったので、今回は最初に少しだけ抑えるべき ところを説明しておきます。 ① ILで覚えておく最初のことは、 「System.Reflection.Emit名前空間」だ。 ◦ MSDNやILSpyで調べる足掛かりにする。
8.
導入 「System.Reflection.Emit.OpCodesクラス」 ◦ このクラスに「オプコード」の定義が含まれている。 コードから使えるよう にする利便性のため (Meta-programming)
9.
導入 ②オプコード(OpCode)とは: ◦ CLRが理解できる中間言語(バイトコード) CLR OpCode.Ldarg OpCode.Add OpCode.Ldfld OpCode.Call OpCode.Ret 0x20 0x58 0x7b, &_v 0x28,
&ToString 0x2a
10.
導入 ③ OpCodeにはいくつか種類がある ◦ 定数系:
Ldc Ldstr Ldnull Ldtoken ◦ 引数操作系: Ldarg Starg ◦ ローカル変数系: Ldloc Stloc ◦ フィールド操作系: Ldfld Stfld ◦ 配列操作系: Ldelem Stelem Newarr ◦ 計算系: Add Sub Mul Div And Or Xor Not Shl Shr ◦ 生成系: Newobj Dup ◦ 型変換系: Conv Castclass Box Unbox ◦ 遷移系: Br Call Callvirt Ret Throw Rethrow Switch ◦ その他: Ldind Stind Localloc
11.
導入 ④スタック操作・スタックマシンとは: ◦ CLRがバイトコード由来で動作するための基礎となる構造 CLR 1. Ldarg 3.
Add 2. Ldfld CLR Stack 123 456
12.
導入 ④スタック操作・スタックマシンとは: ◦ CLRがバイトコード由来で動作するための基礎となる構造 CLR 3. Add CLR
Stack 123 456 123 456 579
13.
導入 ④スタック操作・スタックマシンとは: ◦ CLRがバイトコード由来で動作するための基礎となる構造 CLR 3. Add CLR
Stack 579 579
14.
いよいよ実践
15.
準備 適当にチーム分けします。 チームには少なくともVisual Studioが入ったPCを。 GitHub: https://github.com/kekyo/CenterCLR.ReflectionEmitTemplate.git Macの人は、可能ならVisual Studio
Codeと.NET Core5をインスコ (あんまりフォローできないけど、ソースはnetcore5で動くよ うにしてあります) ILSpy必須(Bingる)
16.
Part 1 引数の値に1を加算して返すようにする。 ポイント: ◦ 引数の値はどうやって取得するか ◦
加算するにはどうするか ヒント: ◦ 引数操作系: Ldarg Starg (MSDNのOpCodesクラスを見る) ◦ 計算系: Add Sub Mul Div And Or Xor Not Shl Shr ◦ 戻り値を返すには? 元のコードはどうなっていた?
17.
Part 2 引数を増やして、加算して返す ポイント: ◦ 引数を増やすためには、Emitterも変更する必要がある。 ヒント: ◦
DefineMethodとは
18.
Part 3 引数の文字列を値に変換する ポイント: ◦ Convert.ToInt32メソッドを使う事にする ◦
メソッドを呼び出すにはCallオプコードを使う ◦ 沢山のオーバーロードからどうやって絞り込むか? ヒント: ◦ MethodInfoはType.GetMethodsで取得する
19.
Part 4 二つの引数の値をstring.Formatでフォーマットする ポイント: ◦ String.Formatメソッドのオーバーロードをどうやって特定するか? ◦
型が違う場合は、変換する必要がある ヒント: ◦ MethodInfoはType.GetMethodで取得する ◦ 型変換のIL命令は2種類ある ◦ object hoge = 123; という式の暗黙変換の事を何て言ったっけ?
20.
Part 5 インスタンスメソッドを作る(仕様はPart4のまま) ポイント: ◦ テンプレートコードはstaticメソッドを作って、そのデリゲートを返す。だか らEmitterを変更する必要がある ◦
インスタンスメソッドを実行するには、インスタンスが必要(インスタンス の生成はILでやらなくて良い) ◦ thisはどこにあるのか ◦ デフォルトコンストラクタを定義する ヒント: ◦ DefineMethodのフラグによって、定義するメソッドの属性が変わる ◦ インスタンスメソッドの第0引数がthis ◦ Activatorクラス
21.
Part 6 フィールドを作り、前回の結果も加えて結果を計算する ポイント: ◦ TypeBuilderを使ってフィールドを定義する ◦
フィールドにアクセスするIL命令 ヒント: ◦ 「フィールドの値を読み書き」と言うより、「フィールドの値をス タックに積んだり出したり」
22.
Part 7 C#で書いたクラスを継承する ポイント: ◦ クラスはpublicでnon-sealedで定義する ◦
クラスのコンストラクタは呼び出し可能でなければならない ヒント: ◦ 「継承するクラス型の指定」は、どこで定義される情報なのか?
23.
Part 8 継承クラスのインスタンスメソッドを呼び出す ポイント: ◦ 継承元のクラスのメソッド定義を入手して呼び出す ◦
呼び出しにthisが必要 ヒント: ◦ なし
24.
Part 9 継承してオーバーライドされた仮想メソッドを呼び出す ポイント: ◦ 基底クラスのメソッド情報を使う ◦
オーバーライドされたメソッドが呼び出される ヒント: ◦ 仮想メソッドを呼び出すIL命令
25.
Part 10 オーバーライドされた仮想メソッドを無視し、基底メソッド を呼び出す ポイント: ◦ C#では実現できない ヒント: ◦
IL命令は実直
26.
Part 11 クラスのインスタンスを生成する ポイント: ◦ newするには? ◦
コンストラクタとは ヒント: ◦ newに対応するIL命令と、その引数
27.
Part 12 プロパティを読み書きする ポイント: ◦ プロパティ情報を取得する ◦
Getter/Setterメソッドとは ヒント: ◦ なし
28.
Part 13 Windows Formを表示し、タイトルバーに”Hello
IL”と表示する ポイント: ◦ Formクラスを使い、インスタンスを生成し、プロパティにアクセスす る ◦ ShowDialogメソッドを呼び出して表示する ヒント: ◦ なし
29.
その他のトピック デリゲートの生成: ◦ Delegate.CreateDelegateとかをいじってからILに望むと吉。 イベント: ◦ プロパティと非常によく似ている。実態はadd/removeメソッド。 仮想メソッドのオーバーライド: ◦
まずDefineMethodでメソッドを定義してから、DefineMethodOverrideで 基底メソッド定義と関連付ける。 インターフェイス型定義と実装:
30.
あとはほとんど応用だ! ILで書く範囲を少なくできるように工夫する。 ◦ 例:基底クラスやユーティリティクラスをC#で書いておき、複雑だがIL 書かなくてもよい処理をオフロードする Emitは色々つらいので、他の方法も理解しておく。 ◦ Emitは実行環境が限られる。Standard
CLRやCore5ではサポートされてい るが、UWPとかダメ ◦ Emitでコードを量産しようとしている → T4テンプレートを使うと、似 たようなソースコードをマクロ的に大量生産できる ◦ 動的型定義はなく、単に高速実行可能な動的言語がほしい → 式木を 使う(式木構造について理解が必要だが、不正なILを作ってしまう危険 はない) ◦ サードパーティライブラリを使う(Mono.CecilはCLRに依存しないでバ イナリを生成できる・Emit定義が楽になる各種補助ライブラリとか)
31.
がんばりました!!
Jetzt herunterladen