teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

ちょっとコードの修正とか

2016/10/07 09:46

投稿

tamoto
tamoto

スコア4346

answer CHANGED
@@ -9,7 +9,7 @@
9
9
 
10
10
  public OperationClass() // コンストラクタ
11
11
  {
12
- this._operations = this.GetType()
12
+ this._operations = typeof(OperationClass)
13
13
  .GetMethods(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.DeclaredOnly)
14
14
  .Where(method => method.Name.StartsWith("Operation")) // 頭に"Operation"がつくメソッドを片っ端から収集
15
15
  .ToDictionary(
@@ -39,6 +39,6 @@
39
39
  }
40
40
  ```
41
41
 
42
- リフレクションは重い処理なので、「クラスのインスタンス生成時に総なめして一気にメソッドキャッシュを作ってしまう」というやり方です。実行時には通常のメソッド呼び出しと変わらない速度になります。
42
+ リフレクションは重い処理なので、「クラスのインスタンス生成時に総なめして一気にメソッドキャッシュを作ってしまう」というやり方です。各Operationの実行時には通常のメソッド呼び出しと変わらない速度になります。
43
- まあ、その分インスタンス生成時が特別に重いんですが。リフレクションは使わないに越したことはないです。
43
+ まあ、その分インスタンス生成時が特別に重いんですが。最初だけ重いけど後が軽ければいいという割り切りですね。できるならリフレクションは使わないに越したことはないです。
44
- のコードは、「頭に"Operation"がつく、パブリックでないインスタンスメソッド」を片っ端からDictionaryに放り込むので、`OperationCore`みたいな名前のメソッドが存在すると例外を吐いて死にます。名前を変えれば問題ないですが。
44
+ あと、現状のコードは、「頭に"Operation"がつく、パブリックでないインスタンスメソッド」を片っ端からDictionaryに放り込むので、`OperationCore`みたいな名前のメソッドが存在すると例外を吐いて死にます。名前を変えれば問題ないですが。