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

回答編集履歴

1

interfaceの具体実装と,その型を使う側の例を追記

2020/03/19 04:28

投稿

fana
fana

スコア12229

answer CHANGED
@@ -19,4 +19,65 @@
19
19
  /// <returns>正解ならtrue</returns>
20
20
  bool IsCorrect();
21
21
  }
22
+ ```
23
+
24
+ ---
25
+
26
+ IQuestionの具体実装と,それを使う側の雰囲気は,こんな感じでしょうか.
27
+
28
+ ```
29
+ /// <summary>
30
+ /// □ * □ = あらかじめ定められた数
31
+ /// という,2つの答えを入力するタイプの穴埋め問題.
32
+ /// </summary>
33
+ public class QuestionImpl : IQuestion
34
+ {
35
+ /// <summary>
36
+ /// ctor
37
+ /// </summary>
38
+ /// <param name="TgtValue">
39
+ /// □ * □ = あらかじめ定められた数
40
+ /// という問題の右辺の値を指定.
41
+ /// </param>
42
+ public QuestionImpl( int TgtValue ){ m_TgtValue = TgtValue; }
43
+
44
+ public Action<int>[] GetAnswerInputWays()
45
+ {
46
+ return new Action<int>[]
47
+ {
48
+ (int _)=>{ m_Ans1=_; },
49
+ (int _)=>{ m_Ans2=_; }
50
+ };
51
+ }
52
+
53
+ public bool IsCorrect(){ return (m_Ans1 * m_Ans2 == m_TgtValue); }
54
+
55
+ //入力された値
56
+ //※まともにやるなら,入力前に IsCorrdct() がtrueにならないように「入力を行ったか?」がわかるような方法にする必要かもしれない.
57
+ private int m_Ans1 = 0;
58
+ private int m_Ans2 = 0;
59
+
60
+ //ctorで指定された値
61
+ private readonly int m_TgtValue;
62
+ }
63
+
64
+
65
+ class Program
66
+ {
67
+ static void Main(string[] args)
68
+ {
69
+ IQuestion Q = new QuestionImpl( 15 );
70
+
71
+ var InputActs = Q.GetAnswerInputWays();
72
+ //※InputActsの個数をチェックして,その分だけ入力処理を行うことになるが,
73
+ // ここでは面倒なので,その結果として3と4が入力されたのだとする.
74
+ InputActs[0]( 3 );
75
+ InputActs[1]( 4 );
76
+ Console.WriteLine( Q.IsCorrect().ToString() ); //false
77
+
78
+ //2番目の答えを入力し直す
79
+ InputActs[1]( 5 );
80
+ Console.WriteLine( Q.IsCorrect().ToString() ); //true
81
+ }
82
+ }
22
83
  ```