回答編集履歴

7

追記

2021/02/02 12:17

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -201,3 +201,97 @@
201
201
  大事なのは、目的がないソースコードを書かないことです。
202
202
 
203
203
  ソースコードは目的に沿って書くものだからです。
204
+
205
+
206
+
207
+ ## 追記について
208
+
209
+
210
+
211
+ > 例えば染色体(Chromosomes)をPersonは持っています.これはどのPersonにもあり,インスタンスごとに違うものでもないのでstaticです
212
+
213
+
214
+
215
+ PersonはBoyかもしれないしGirlかもしれません。すなわち、Personが持つ染色体はxyかもしれないしxxかもしれません。すなわち、PersonのChromosomesはstaticではありません。
216
+
217
+
218
+
219
+ > 例えば染色体みたいなBoy全体が持っていて,かつxyと決まっているものでしたらstatic変数かと思うのですが,いかがでしょうか?
220
+
221
+
222
+
223
+ こちらの質問もまず前提にはなりますが、staticはそもそもオブジェクト指向の考えにはないキーワードです。ポリモーフィズム(今回でいう継承)とstaticは相性が悪いので混ぜられません。
224
+
225
+
226
+
227
+ 私なら下記のように抽象プロパティを使って実現します。
228
+
229
+ ```C#
230
+
231
+ public abstract class Person
232
+
233
+ {
234
+
235
+ public string Name { get; set; }
236
+
237
+ public int Age { get; set; }
238
+
239
+ public abstract string Chromosomes { get; }
240
+
241
+
242
+
243
+ public Person (string Name, int Age) {
244
+
245
+ this.Name = Name;
246
+
247
+ this.Age = Age;
248
+
249
+ }
250
+
251
+ }
252
+
253
+
254
+
255
+ public class Boy : Person
256
+
257
+ {
258
+
259
+ public override string Chromosomes { get; } = "xy";
260
+
261
+ public Boy (string Name, int Age) : base (Name, Age) { }
262
+
263
+ }
264
+
265
+
266
+
267
+ public class Girl : Person
268
+
269
+ {
270
+
271
+ public override string Chromosomes { get; } = "xx";
272
+
273
+ public Girl (string Name, int Age) : base (Name, Age) { }
274
+
275
+ }
276
+
277
+ ```
278
+
279
+
280
+
281
+ BoyとGirlにstaticなメンバーを持たせて実現もできますが、それならオブジェクトを作るのではなくenumを作ってそこから"xy"だったり"xx"の情報を得る方がわかりやすくて良いと思います。
282
+
283
+
284
+
285
+ ```C#
286
+
287
+ public enum HumanChromosomes
288
+
289
+ {
290
+
291
+ Male = "xy",
292
+
293
+ Female = "xx"
294
+
295
+ }
296
+
297
+ ```

6

privateつけなくていいか。サンプルだし

2021/02/02 12:17

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -146,9 +146,9 @@
146
146
 
147
147
  {
148
148
 
149
- public string Name { get; private set; }
149
+ public string Name { get; set; }
150
-
150
+
151
- public int Age { get; private set; }
151
+ public int Age { get; set; }
152
152
 
153
153
 
154
154
 

5

人の名前や年齢って一応変わるか… private set.

2021/02/02 08:36

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -146,9 +146,9 @@
146
146
 
147
147
  {
148
148
 
149
- public string Name { get; }
149
+ public string Name { get; private set; }
150
-
150
+
151
- public int Age { get; }
151
+ public int Age { get; private set; }
152
152
 
153
153
 
154
154
 

4

固定長ではないのでpersonsからpeopleに変更

2021/02/02 08:36

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -92,7 +92,7 @@
92
92
 
93
93
  ```C#
94
94
 
95
- var persons = new List<Person>(){
95
+ var people = new List<Person>(){
96
96
 
97
97
  new Boy("Taro", 12),
98
98
 
@@ -110,7 +110,7 @@
110
110
 
111
111
 
112
112
 
113
- var boys = persons.Where(x => x is Boy);
113
+ var boys = people.Where(x => x is Boy);
114
114
 
115
115
  var boyNames = boys.Select(x => x.Name);
116
116
 
@@ -118,7 +118,7 @@
118
118
 
119
119
 
120
120
 
121
- var girls = persons.Where(x => x is Girl);
121
+ var girls = people.Where(x => x is Girl);
122
122
 
123
123
  var girlNames = girls.Select(x => x.Name);
124
124
 

3

半角スぺースが気になってしまった

2021/02/02 08:34

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -92,13 +92,13 @@
92
92
 
93
93
  ```C#
94
94
 
95
- var persons = new List<Person>() {
95
+ var persons = new List<Person>(){
96
-
96
+
97
- new Boy("Taro", 12 ),
97
+ new Boy("Taro", 12),
98
-
98
+
99
- new Boy("Jiro", 13 ),
99
+ new Boy("Jiro", 13),
100
-
100
+
101
- new Boy("Sabu", 14 ),
101
+ new Boy("Sabu", 14),
102
102
 
103
103
  new Girl("Ichi", 15),
104
104
 

2

typo + ミニ補足

2021/02/02 08:02

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
 
16
16
 
17
- 例え、どんな設計思想であれ、**これ等の基本的な思想からはブレてはいけません。**
17
+ 例え、C#のどんな設計思想であれ、**これ等の基本的な思想からはブレてはいけません。**
18
18
 
19
19
  これがそもそも論でお伝えしたいポイントです。
20
20
 
@@ -112,7 +112,7 @@
112
112
 
113
113
  var boys = persons.Where(x => x is Boy);
114
114
 
115
- var boyNames = boy.Select(x => x.Name);
115
+ var boyNames = boys.Select(x => x.Name);
116
116
 
117
117
  Console.WriteLine(String.Join(",", boyNames)); // Taro,Jiro,Sabu
118
118
 

1

表記ゆれがひどいので直した

2021/02/02 07:57

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
 
4
4
 
5
- コードは目的に沿って書くものです。
5
+ ソースコードは目的に沿って書くものです。
6
-
6
+
7
- コードはその目的が分かりやすく、かつ読みやすいように表現されるべきです。
7
+ ソースコードはその目的が分かりやすく、かつ読みやすいように表現されるべきです。
8
8
 
9
9
 
10
10
 
@@ -20,7 +20,7 @@
20
20
 
21
21
 
22
22
 
23
- この基本的な思想からブレていないかもう1度コードを見直してください。
23
+ この基本的な思想からブレていないかもう1度ソースコードを見直してください。
24
24
 
25
25
 
26
26
 
@@ -198,6 +198,6 @@
198
198
 
199
199
 
200
200
 
201
- 大事なのは、目的がないソースを書かないことです。
201
+ 大事なのは、目的がないソースコードを書かないことです。
202
-
202
+
203
- コードは目的に沿って書くものだからです。
203
+ ソースコードは目的に沿って書くものだからです。