Slide 1

Slide 1 text

C#のリフレクションを使っ てみよう きょーま

Slide 2

Slide 2 text

name : きょーま job : クライアントエンジニア ・新機能開発 ・デバッグ機能 ・Unity / C# / C++ hobby : ゲーム、お絵かき、酒 自己紹介 profile

Slide 3

Slide 3 text

みなさん

Slide 4

Slide 4 text

C# 使ってますか?

Slide 5

Slide 5 text

リフレクション 使ってますか?

Slide 6

Slide 6 text

#リフレクションとは ● C#の機能の一つ ● 実行時型情報と呼ばれるもの ● プログラム実行時に メタデータを取り出す機能 ● “C# リフレクション” で検索検索ゥ what is reflection ?

Slide 7

Slide 7 text

要するに

Slide 8

Slide 8 text

文字列から指定クラスの インスタンスを作ったり

Slide 9

Slide 9 text

privateなメンバを参照したり

Slide 10

Slide 10 text

privateなメソッドを 外から実行できる

Slide 11

Slide 11 text

非常に治安の悪い機能!!

Slide 12

Slide 12 text

チュートリアル tutorial 1. インスタンスを作る 2. privateなフィールドを取得 3. privateなメソッドを呼ぶ

Slide 13

Slide 13 text

基本的な使い方 how to use 1. SystemとSystem.Reflection をusing 2. Typeを取得 3. Typeから FieldInfo、MethodInfoを取得

Slide 14

Slide 14 text

例えば こんなクラスがあったとする

Slide 15

Slide 15 text

← インスタンスを作る ← privateなフィールドを取得 ← privateなメソッドを呼ぶ

Slide 16

Slide 16 text

検索方法の制御 BindingFlags BindingFlags ● フィールドやメソッドを 取得するときの条件 ● NonPublicでprivateを対象に ● 他にもstaticをとったり 大文字小文字を無視したり ● 詳しくはWebで!!

Slide 17

Slide 17 text

これでpublicとかprivateとか 気にせずコードを書けるぜ あいつのコード、 privateばっかでうぜーんだよな

Slide 18

Slide 18 text

ダメです

Slide 19

Slide 19 text

リフレクションを使用す るべきではない理由 why not use reflection ● カプセル化を破壊する ● パフォーマンスが悪い

Slide 20

Slide 20 text

基本的にロジックや設計に リフレクションを使うべきでない

Slide 21

Slide 21 text

リフレクションの活 用場所 effective use of reflection ● デバッグ機能 ● ホットリロードなツール

Slide 22

Slide 22 text

デバッグ機能 for debugging ● デバッグのために ロジックが歪にならない ● メインロジックの 単体テストが容易にできる

Slide 23

Slide 23 text

ホットリロード なツール for hot reload ● ゲームを動かしながらできる データ反映やデバッグ機能 ● 試行錯誤が容易

Slide 24

Slide 24 text

ホットリロードな デバッグツールの例 example hot reload debugging tool ● フィールドのある地点に 障害物や敵キャラを配置する ● 戦闘中にあるキャラクターの パラメータを変更する

Slide 25

Slide 25 text

ゲームロジック のクラス群 デバッグ機能 or データツール ロジックとデバッグ用のコードを切り離せる ゲームロジック内にテストコードを 書かなくて良いという意味ではない リフレクションで参照 高い凝集度・疎結合 1つのプロジェクト

Slide 26

Slide 26 text

まとめ summary ● C#にはリフレクションって 治安が悪い機能があるよ ● メインロジックでは 基本的に使わないのが吉だよ ● 工夫すれば、 便利な使い方ができるよ