Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

59d27144274aec8e42c319f365325283?s=47 kyoma
April 26, 2019

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

C#におけるリフレクションの概略
・概要
・できること
・使用上の注意

59d27144274aec8e42c319f365325283?s=128

kyoma

April 26, 2019
Tweet

Transcript

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

  2. name : きょーま job : クライアントエンジニア ・新機能開発 ・デバッグ機能 ・Unity /

    C# / C++ hobby : ゲーム、お絵かき、酒 自己紹介 profile
  3. みなさん

  4. C# 使ってますか?

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

  6. #リフレクションとは • C#の機能の一つ • 実行時型情報と呼ばれるもの • プログラム実行時に メタデータを取り出す機能 • “C#

    リフレクション” で検索検索ゥ what is reflection ?
  7. 要するに

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

  9. privateなメンバを参照したり

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

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

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

  13. 基本的な使い方 how to use 1. SystemとSystem.Reflection をusing 2. Typeを取得 3.

    Typeから FieldInfo、MethodInfoを取得
  14. 例えば こんなクラスがあったとする

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

  16. 検索方法の制御 BindingFlags BindingFlags • フィールドやメソッドを 取得するときの条件 • NonPublicでprivateを対象に • 他にもstaticをとったり

    大文字小文字を無視したり • 詳しくはWebで!!
  17. これでpublicとかprivateとか 気にせずコードを書けるぜ あいつのコード、 privateばっかでうぜーんだよな

  18. ダメです

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

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

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

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

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

  24. ホットリロードな デバッグツールの例 example hot reload debugging tool • フィールドのある地点に 障害物や敵キャラを配置する

    • 戦闘中にあるキャラクターの パラメータを変更する
  25. ゲームロジック のクラス群 デバッグ機能 or データツール ロジックとデバッグ用のコードを切り離せる ゲームロジック内にテストコードを 書かなくて良いという意味ではない リフレクションで参照 高い凝集度・疎結合

    1つのプロジェクト
  26. まとめ summary • C#にはリフレクションって 治安が悪い機能があるよ • メインロジックでは 基本的に使わないのが吉だよ • 工夫すれば、

    便利な使い方ができるよ