Suche senden
Hochladen
プログラミング .NET Framework 第4版
•
Als PPTX, PDF herunterladen
•
15 gefällt mir
•
6,403 views
信之 岩永
Folgen
2013/10/26(土) 「プログラミング .NET Framework 第4版 」座談会 http://atnd.org/event/E0019986 にて発表。
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 39
Jetzt herunterladen
Empfohlen
広がる .Net
広がる .Net
信之 岩永
C#とILとネイティブと
C#とILとネイティブと
信之 岩永
C#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
信之 岩永
動的なILの生成と編集
動的なILの生成と編集
terurou
C#言語機能の作り方
C#言語機能の作り方
信之 岩永
C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版
信之 岩永
C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0
信之 岩永
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
信之 岩永
Empfohlen
広がる .Net
広がる .Net
信之 岩永
C#とILとネイティブと
C#とILとネイティブと
信之 岩永
C#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
信之 岩永
動的なILの生成と編集
動的なILの生成と編集
terurou
C#言語機能の作り方
C#言語機能の作り方
信之 岩永
C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版
信之 岩永
C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0
信之 岩永
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
信之 岩永
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
信之 岩永
Net fringejp2016
Net fringejp2016
Yusuke Fujiwara
C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)
信之 岩永
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
hecomi
C# 3.0 以降
C# 3.0 以降
Fujio Kojima
LLPML
LLPML
7shi
MfcLightToolkit for small MFC apps
MfcLightToolkit for small MFC apps
Takaaki Suzuki
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
shinjiigarashi
今からでも遅くないC#開発
今からでも遅くないC#開発
Kazunori Hamamoto
C# design note sep 2014
C# design note sep 2014
信之 岩永
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
信之 岩永
最速C# 7.x
最速C# 7.x
Yamamoto Reki
Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3
信之 岩永
本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能
mametter
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
信之 岩永
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
Phpstormちょっといい話
Phpstormちょっといい話
Hisateru Tanaka
IL2CPPに関する軽い話
IL2CPPに関する軽い話
Wooram Yang
Deep Dive C# 6.0
Deep Dive C# 6.0
信之 岩永
Tr18015
Tr18015
kikairoya
PodcastをSkype経由で録音
PodcastをSkype経由で録音
ebina yohichi
C#マスコット(公開用)
C#マスコット(公開用)
信之 岩永
Weitere ähnliche Inhalte
Was ist angesagt?
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
信之 岩永
Net fringejp2016
Net fringejp2016
Yusuke Fujiwara
C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)
信之 岩永
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
hecomi
C# 3.0 以降
C# 3.0 以降
Fujio Kojima
LLPML
LLPML
7shi
MfcLightToolkit for small MFC apps
MfcLightToolkit for small MFC apps
Takaaki Suzuki
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
shinjiigarashi
今からでも遅くないC#開発
今からでも遅くないC#開発
Kazunori Hamamoto
C# design note sep 2014
C# design note sep 2014
信之 岩永
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
信之 岩永
最速C# 7.x
最速C# 7.x
Yamamoto Reki
Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3
信之 岩永
本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能
mametter
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
信之 岩永
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
Phpstormちょっといい話
Phpstormちょっといい話
Hisateru Tanaka
IL2CPPに関する軽い話
IL2CPPに関する軽い話
Wooram Yang
Deep Dive C# 6.0
Deep Dive C# 6.0
信之 岩永
Tr18015
Tr18015
kikairoya
Was ist angesagt?
(20)
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
Net fringejp2016
Net fringejp2016
C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
C# 3.0 以降
C# 3.0 以降
LLPML
LLPML
MfcLightToolkit for small MFC apps
MfcLightToolkit for small MFC apps
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
今からでも遅くないC#開発
今からでも遅くないC#開発
C# design note sep 2014
C# design note sep 2014
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
最速C# 7.x
最速C# 7.x
Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3
本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Phpstormちょっといい話
Phpstormちょっといい話
IL2CPPに関する軽い話
IL2CPPに関する軽い話
Deep Dive C# 6.0
Deep Dive C# 6.0
Tr18015
Tr18015
Andere mochten auch
PodcastをSkype経由で録音
PodcastをSkype経由で録音
ebina yohichi
C#マスコット(公開用)
C#マスコット(公開用)
信之 岩永
Electron で作るはじめてのguiアプリ
Electron で作るはじめてのguiアプリ
祐磨 堀
要件を捨てて検証に出よう。賃貸情報サイト"カリル"での 仮説検証型システム開発 | Livesense Inc.
要件を捨てて検証に出よう。賃貸情報サイト"カリル"での 仮説検証型システム開発 | Livesense Inc.
Livesense Inc.
Heliumエンジンの設計と実装
Heliumエンジンの設計と実装
DADA246
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
Youichiro Miyake
Killzone Shadow Fall: Creating Art Tools For A New Generation Of Games
Killzone Shadow Fall: Creating Art Tools For A New Generation Of Games
Guerrilla
Electronで 動画ながら見アプリを作った
Electronで 動画ながら見アプリを作った
Hayato Koriyama
20分でできる!Xamarin.Forms入門
20分でできる!Xamarin.Forms入門
Shinichi Hirauchi
WPF4.5入門
WPF4.5入門
一希 大田
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
マイクロサービス運用の所感 #m3dev
マイクロサービス運用の所感 #m3dev
Kazuhiro Sera
さらに上を目指すための iOS アプリ設計
さらに上を目指すための iOS アプリ設計
Taketo Sano
XAML入門
XAML入門
一希 大田
Player Traversal Mechanics in the Vast World of Horizon Zero Dawn
Player Traversal Mechanics in the Vast World of Horizon Zero Dawn
Guerrilla
Xamarin.forms入門
Xamarin.forms入門
一希 大田
Andere mochten auch
(16)
PodcastをSkype経由で録音
PodcastをSkype経由で録音
C#マスコット(公開用)
C#マスコット(公開用)
Electron で作るはじめてのguiアプリ
Electron で作るはじめてのguiアプリ
要件を捨てて検証に出よう。賃貸情報サイト"カリル"での 仮説検証型システム開発 | Livesense Inc.
要件を捨てて検証に出よう。賃貸情報サイト"カリル"での 仮説検証型システム開発 | Livesense Inc.
Heliumエンジンの設計と実装
Heliumエンジンの設計と実装
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
Killzone Shadow Fall: Creating Art Tools For A New Generation Of Games
Killzone Shadow Fall: Creating Art Tools For A New Generation Of Games
Electronで 動画ながら見アプリを作った
Electronで 動画ながら見アプリを作った
20分でできる!Xamarin.Forms入門
20分でできる!Xamarin.Forms入門
WPF4.5入門
WPF4.5入門
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
マイクロサービス運用の所感 #m3dev
マイクロサービス運用の所感 #m3dev
さらに上を目指すための iOS アプリ設計
さらに上を目指すための iOS アプリ設計
XAML入門
XAML入門
Player Traversal Mechanics in the Vast World of Horizon Zero Dawn
Player Traversal Mechanics in the Vast World of Horizon Zero Dawn
Xamarin.forms入門
Xamarin.forms入門
Ähnlich wie プログラミング .NET Framework 第4版
プログラミングNet framework3のお題
プログラミングNet framework3のお題
Kazushi Kamegawa
C#勉強会
C#勉強会
hakugakucafe
ELFの動的リンク
ELFの動的リンク
7shi
Hello ".NET" World
Hello ".NET" World
将 高野
Ssmjp20131031
Ssmjp20131031
Takashi Naito
10分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 1010
Nobuaki Oshiro
10分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 0905
Nobuaki Oshiro
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
Yoshihisa Ozaki
研究生のためのC++ no.6
研究生のためのC++ no.6
Tomohiro Namba
200923 01jp
200923 01jp
openrtm
20150228_渋谷Webエンジニア朝会LT資料
20150228_渋谷Webエンジニア朝会LT資料
慎平 仁藤
LINQ to なにがし
LINQ to なにがし
Yuta Matsumura
ELK ではじめる自宅ネットワーク監視
ELK ではじめる自宅ネットワーク監視
npsg
Rust samurai lightning talk
Rust samurai lightning talk
Naruto TAKAHASHI
.NET Core とマルチプラットフォーム
.NET Core とマルチプラットフォーム
shozon
今からはじめる! Linuxコマンド入門
今からはじめる! Linuxコマンド入門
VirtualTech Japan Inc.
deep dive distributed tracing
deep dive distributed tracing
Takayoshi Tanaka
10分で分かるr言語入門ver2 upload用
10分で分かるr言語入門ver2 upload用
Nobuaki Oshiro
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版
Takuya Matsunaga
Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版
Takuya Matsunaga
Ähnlich wie プログラミング .NET Framework 第4版
(20)
プログラミングNet framework3のお題
プログラミングNet framework3のお題
C#勉強会
C#勉強会
ELFの動的リンク
ELFの動的リンク
Hello ".NET" World
Hello ".NET" World
Ssmjp20131031
Ssmjp20131031
10分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 0905
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
研究生のためのC++ no.6
研究生のためのC++ no.6
200923 01jp
200923 01jp
20150228_渋谷Webエンジニア朝会LT資料
20150228_渋谷Webエンジニア朝会LT資料
LINQ to なにがし
LINQ to なにがし
ELK ではじめる自宅ネットワーク監視
ELK ではじめる自宅ネットワーク監視
Rust samurai lightning talk
Rust samurai lightning talk
.NET Core とマルチプラットフォーム
.NET Core とマルチプラットフォーム
今からはじめる! Linuxコマンド入門
今からはじめる! Linuxコマンド入門
deep dive distributed tracing
deep dive distributed tracing
10分で分かるr言語入門ver2 upload用
10分で分かるr言語入門ver2 upload用
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版
Mehr von 信之 岩永
YouTube ライブ配信するようになった話
YouTube ライブ配信するようになった話
信之 岩永
C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話
信之 岩永
Unicode文字列処理
Unicode文字列処理
信之 岩永
C# 8.0 null許容参照型
C# 8.0 null許容参照型
信之 岩永
async/await のしくみ
async/await のしくみ
信之 岩永
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6
信之 岩永
それっぽく、適当に
それっぽく、適当に
信之 岩永
Modern .NET
Modern .NET
信之 岩永
.NET Compiler Platform
.NET Compiler Platform
信之 岩永
Code Contracts in .NET 4
Code Contracts in .NET 4
信之 岩永
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
信之 岩永
.NET vNext
.NET vNext
信之 岩永
Coding Interview
Coding Interview
信之 岩永
非同期処理の基礎
非同期処理の基礎
信之 岩永
Anders Hejlsberg Q & A
Anders Hejlsberg Q & A
信之 岩永
Mehr von 信之 岩永
(15)
YouTube ライブ配信するようになった話
YouTube ライブ配信するようになった話
C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話
Unicode文字列処理
Unicode文字列処理
C# 8.0 null許容参照型
C# 8.0 null許容参照型
async/await のしくみ
async/await のしくみ
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6
それっぽく、適当に
それっぽく、適当に
Modern .NET
Modern .NET
.NET Compiler Platform
.NET Compiler Platform
Code Contracts in .NET 4
Code Contracts in .NET 4
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
.NET vNext
.NET vNext
Coding Interview
Coding Interview
非同期処理の基礎
非同期処理の基礎
Anders Hejlsberg Q & A
Anders Hejlsberg Q & A
Kürzlich hochgeladen
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
Kürzlich hochgeladen
(9)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
プログラミング .NET Framework 第4版
1.
プログラミング .NET Framework 第4版 岩永 信之
2.
プログラミング .NET Framework 第4版 • 原著「CLR
via C# Forth Edition」 • CLRの中身 • .NETプログラムの内部動作の仕組み
3.
プログラミング .NET Framework ・・・ C# コンパイラ .NET Framework 標準クラス ライブラリ VB コンパイラ その他の コンパイラ 中間言語(IL)コード 仮想実行環境 CLR ネイティブ
コード この辺りが 主役の本 普段、あまり意識しない 直接触れない基礎
4.
Jeffrey Richiter(原著作者) • 「Windows
Via C/C++」 「Advanced Windows」なども執筆 • Windowsのスレッド周りとかかなり詳しい • Windows/.NET系のコンサル • CLRの設計にもかかわる • C# 5.0のasync/awaitのアイディアの原型も
5.
.NETを学ぶ • .NETの基礎を押さえたい人 • ステップアップしたい人 •
基礎知識はデバッグや障害対応で役立つ • 性能面や安全面でもよりよいコードを • JavaやRubyなど、他の環境をガッツリやって いた人が.NETを使うことになった時などにも
6.
.NETに学ぶ • .NETには、アプリ開発に必要ないろいろ詰まっ てる • .NET(というか仮想実行環境/フレームワーク)を 使わずに自前実装が必要なことにぶつかったとして も、かなり役立つ知識 •
そういう、.NETの中身の詳細が本書に
7.
例えば本書には • CLRの実行モデル • メタデータの構造、型システムの詳細 •
コア機能 • 例外、GC、AppDomain • CLRをネイティブ アプリでホストするには • 非同期処理
8.
「第4版」 • 要は、.NET 4
→ .NET 4.5 対応 • .NET 4.5 対応のうち、 本書(というかCLR)的に関連深いのは: • TypeInfo型とType型 • WinRT • async/await
9.
訳本に関して 翻訳のレベルかなり上がった自信があります!
10.
書籍紹介まとめと、残り • .NETからいろいろ学んでください • 本書は.NETの内部に非常に詳しい •
座談会、お楽しみに! • このセッションの残りは: • 「第4版」での追加部分 • というか、.NET 4 → .NET 4.5 追加部分 • TypeInfo、WinRT、async/await
11.
Reflection Type型とTypeInfo型
12.
Reflection APIの変更 • Type型からTypeInfo型を分離 •
.NET 4.5では後方互換性のために“追加” • .NET Core(ストア アプリ向け)では破壊的変更 • ポータブルな実装したければ、新APIの利用が必要 どうしてこうなったかというと… • 名前空間整理 (SystemとSystem.Reflection) • 2種類の型情報 (TypeDefとTypeRef)
13.
型情報の使いどころ Type型(System) の基本情報 型の判定 is演算子 as演算子 x.GetType() == typeof(T) メンバー情報の取得 DeclaredMembers BaseType ImplementedInterfaces リフレクション情報 (System.Reflection) 動的実行 Reflection.Emit DynamicInvoke Experssion.Compile
14.
2種類の型情報 • IL的に、型情報テーブルは2種類(2段階)ある TypeDef TypeRef 型の具体的な定義 型を参照するための情報 型を定義したアセンブリが ないと取り出せない情報 • 名前、名前空間 •
メンバー情報 • 継承階層の情報 型を定義したアセンブリが なくても知れる情報 • どこで定義されているか • 名前、名前空間 少ない情報 緩い制約
15.
2種類の型情報 • IL的に、型情報テーブルは2種類(2段階)ある TypeDef TypeRef 型の具体的な定義 型を参照するための情報 型を定義したアセンブリが ないと取り出せない情報 • • 名前、名前空間 •
メンバー情報 • • 継承階層の情報 型を定義したアセンブリが なくても知れる情報 プログラムを実行する • どこで定義されているか ためにはTypeDefが必要 • 名前、名前空間 アセンブリが欠けてい ると実行不能
16.
2種類の型情報 • IL的に、型情報テーブルは2種類(2段階)ある TypeDef TypeRef 型の具体的な定義 型を参照するための情報 型を定義したアセンブリが ないと取り出せない情報 • 名前、名前空間 参照先のアセンブリが •
メンバー情報 欠けていても、どこの • 継承階層の情報 何を参照しているか 名前くらいはわかる 型を定義したアセンブリが なくても知れる情報 • どこで定義されているか • 名前、名前空間
17.
.NET 4以前のType型 全部Type型でやってた • Type型を得るためにはTypeDef必須 •
定義側アセンブリ必須 • 参照側アセンブリ単体で読めない • 静的解析ツールとかで困ることがある • Type型からFieldInfoなどを取る • System名前空間がSystem.Reflection名前空間に 結構大きく依存
18.
.NET 4.5以降のType型 Type型とTypeInfo型に分離 • Type型(System名前空間) =TypeRef 定義側アセンブリ 不要 System.Reflection 名前空間への依存低減 •
TypeInfo型(System.Reflection名前空間) =TypeDef • TypeInfo型からFieldInfoなどを取る
19.
Reflectionまとめ • Type型からTypeInfo型を分離 • System.Reflection名前空間への依存低減 •
TypeRef情報だけを取れるように • 静的解析ツールなどで有用 • .NET 4以前 → .NET Core移行では注意が必要 • 破壊的変更になっている • (.NET 4.5の場合は単なる追加)
20.
WinRT 言語プロジェクション
21.
WinRT (Windows Runtime) •
関連する技術/スタイルはいろいろあるものの Windows APIを一新 XAML Windows ストア アプリ Immersive UI MS Design Style C++ ⇔ .NET ⇔ JavaScript相互運用 .NET Core (ストア アプリ向け.NETライブラリ) C++/CX WinMD 言語プロジェクション
22.
WinRT (Windows Runtime) •
CLR (本書)的に関係するのは Windows APIを一新 XAML Windows ストア アプリ Immersive UI MS Design Style C++ ⇔ .NET ⇔ JavaScript相互運用 この部分 .NET Core (ストア アプリ向け.NETライブラリ) C++/CX WinMD 言語プロジェクション
23.
CLRから見たWinRT • WinMD • C++/CXをコンパイルすると自動で作られる メタデータ
+ 言語プロジェクション • ほぼ、RCW ※ • .NETのメタデータとフォーマット同じ • データ形式的に、ほんとRCW • つまるところ • C++から見て: TypeLibary書くより楽 • .NETから見て: 昔のCOMより参照が楽 ※ Runtime Callable Wrapper: .NETからCOMを呼ぶためのラッパー
24.
言語プロジェクション • 一部の型は別の型に置き替える • C++から見るとIVector<T> .NETから見るとIList<T> みたいな •
ネイティブ/.NET/JavaScriptで、それぞれの流儀で プログラムを書けるように
25.
2種類のプロジェクション • CLRプロジェクション • CLRが内部的に勝手に置き替える •
IVector<T> ⇔ IList<T>とか • フレームワーク プロジェクション • 変換ライブラリが標準提供されているだけ • そのライブラリの呼び出しは手動で • AsTask拡張メソッドとか
26.
CLRプロジェクションの例 .NETの型 IList<T> IReadOnlyList<T> WinRTの型 IVector<T> IVectorView<T> IEnumerable<T> IDictionary<T> IIteratable<T> IMap<T> この他、Uri型とかTimeSpan型は、 .NET側: System名前空間 WinRT側: Windows.Foundation名前空間 に相互変換される
27.
仕組み: IL Tokenタイプ •
Token: 型/メンバーを識別するための4byte整数 • そのうち1byteは、TypeDef/TypeRefのどちらのテー ブルを探せばいいか、タイプ判定に使う • (残り3byteはテーブル内のインデックス) • .NET 4.5で、これに、CLRプロジェクション用 のタイプが増えたみたい
28.
フレームワーク プロジェク ション • System.Runtime.WindowsRuntime.dll内で 定義されたメソッドで明示的に型変換 OpenStreamForReadAsync AsInputStream Stream AsStream AsTask Task AsAsyncAction AsAsyncOperation IStorageFile IStream IAsyncAction IAsyncOperation 要は単なるライブラリ。本書的には関連薄い部分
29.
WinRTまとめ • WinRT、CLR的に関係あるのは • WinMD、CLRプロジェクション •
WinMD • 要はRCW自動生成 • CLRプロジェクション • CLRが内部的に一部の型を置き替え
30.
async/await Jeffrey Richiterといえば非同期
31.
Jeffrey Richter • 原著作者、スレッド/非同期が大好き •
Advanced Windows時代から • 的な「非同期ロック待ち」がらみの特許取ってる (マイクロソフトに売却済み) • SemaphoreSlim.WaitAsyncがこのアイディアに似た実装 • C# 5.0のasync/awaitの設計にも少し関わってるっぽ い
32.
AsyncEnumerator • 第3版までは作者のオレオレasyncライブラリの 解説が入ってた • yield
returnベースで現在のasync/await的なものを 実現 • 第4版ではasync/awaitの説明に置き替え
33.
async/awaitの内部実装 • イテレーター(yield)に似たコード生成 • Awaitable/Awaiterパターン
34.
イテレーター • 中断と再開 class MethodEnumerator
: IEnumerator<int> { public int Current { get; private set; } private int _state = 0; public bool MoveNext() { switch (_state) { case 0: IEnumerable<int> Method() { yield return 1; Current = 1; _state = 1; return true; case 1: Current = 2; _state = 2; return true; case 2: yield return 2; } } } } default: return false;
35.
イテレーター • 中断と再開 class MethodEnumerator
: IEnumerator<int> { public int Current { get; private set; } private int _state = 0; public bool MoveNext() { switch (_state) { case 0: 状態の記録 Current = 1; Current = 1; _state = 1; _state = 1; return true; 中断 return 1: case true; case 1: = 2; Current _state = 2; return true; 再開用のラベル IEnumerable<int> Method() { yield return 1; yield return 2; case 2: } } } } default: return false;
36.
awaitの展開結果(コンセプ ト) • コンセプト的には イテレーター
+ ContinueWith 状態の記録 async Task<int> Method() { var x = await task1; var y = await task2; } _state = 1; if (!task1.IsCompleted) { task1.ContinueWith(a); return; 中断 } 再開用のラベル case 1: var x = task1.Result; 結果の受け取り
37.
awaitの展開結果 • 実際はもう少し複雑 • Awaiterというものを介していたり(Awaitableパ _state
= 1; ターン) var awaiter1 = task1.GetAwaiter(); if (!awaiter1.IsCompleted) { awaiter1.OnCompleted(a); • return; } • case 1: var x = awaiter1.GetResult(); こいつが同期コンテキスト を拾い上げていたりする Awaiterを自作することで、 awaitの挙動を変更可能 • Task以外もawait可能
38.
async/awaitまとめ • C# 5.0のasync/await •
イテレーター(yield)に似たコード生成 • Awaitable/Awaiter • Jeffey Richiterといえばスレッド/非同期 • async/awaitに近いコンセプトのライブラリ作って 公開してた(AsyncEnumerator)
39.
まとめ • プログラミング.NET Framework第4版 •
.NETの内側 • より深い知識でステップアップを • 第4版(.NET 4 → .NET 4.5)では • TypeInfo型 • WinRT • async/await など • 訳本 • 翻訳のクオリティかなり上がったと思います!
Jetzt herunterladen