回答編集履歴

1

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

2020/03/19 04:28

投稿

fana
fana

スコア11663

test CHANGED
@@ -41,3 +41,125 @@
41
41
  }
42
42
 
43
43
  ```
44
+
45
+
46
+
47
+ ---
48
+
49
+
50
+
51
+ IQuestionの具体実装と,それを使う側の雰囲気は,こんな感じでしょうか.
52
+
53
+
54
+
55
+ ```
56
+
57
+ /// <summary>
58
+
59
+ /// □ * □ = あらかじめ定められた数
60
+
61
+ /// という,2つの答えを入力するタイプの穴埋め問題.
62
+
63
+ /// </summary>
64
+
65
+ public class QuestionImpl : IQuestion
66
+
67
+ {
68
+
69
+ /// <summary>
70
+
71
+ /// ctor
72
+
73
+ /// </summary>
74
+
75
+ /// <param name="TgtValue">
76
+
77
+ /// □ * □ = あらかじめ定められた数
78
+
79
+ /// という問題の右辺の値を指定.
80
+
81
+ /// </param>
82
+
83
+ public QuestionImpl( int TgtValue ){ m_TgtValue = TgtValue; }
84
+
85
+
86
+
87
+ public Action<int>[] GetAnswerInputWays()
88
+
89
+ {
90
+
91
+ return new Action<int>[]
92
+
93
+ {
94
+
95
+ (int _)=>{ m_Ans1=_; },
96
+
97
+ (int _)=>{ m_Ans2=_; }
98
+
99
+ };
100
+
101
+ }
102
+
103
+
104
+
105
+ public bool IsCorrect(){ return (m_Ans1 * m_Ans2 == m_TgtValue); }
106
+
107
+
108
+
109
+ //入力された値
110
+
111
+ //※まともにやるなら,入力前に IsCorrdct() がtrueにならないように「入力を行ったか?」がわかるような方法にする必要かもしれない.
112
+
113
+ private int m_Ans1 = 0;
114
+
115
+ private int m_Ans2 = 0;
116
+
117
+
118
+
119
+ //ctorで指定された値
120
+
121
+ private readonly int m_TgtValue;
122
+
123
+ }
124
+
125
+
126
+
127
+
128
+
129
+ class Program
130
+
131
+ {
132
+
133
+ static void Main(string[] args)
134
+
135
+ {
136
+
137
+ IQuestion Q = new QuestionImpl( 15 );
138
+
139
+
140
+
141
+ var InputActs = Q.GetAnswerInputWays();
142
+
143
+ //※InputActsの個数をチェックして,その分だけ入力処理を行うことになるが,
144
+
145
+ // ここでは面倒なので,その結果として3と4が入力されたのだとする.
146
+
147
+ InputActs[0]( 3 );
148
+
149
+ InputActs[1]( 4 );
150
+
151
+ Console.WriteLine( Q.IsCorrect().ToString() ); //false
152
+
153
+
154
+
155
+ //2番目の答えを入力し直す
156
+
157
+ InputActs[1]( 5 );
158
+
159
+ Console.WriteLine( Q.IsCorrect().ToString() ); //true
160
+
161
+ }
162
+
163
+ }
164
+
165
+ ```