回答編集履歴

1

追記

2017/09/26 05:40

投稿

IShix
IShix

スコア1724

test CHANGED
@@ -121,3 +121,127 @@
121
121
  }
122
122
 
123
123
  ```
124
+
125
+
126
+
127
+
128
+
129
+ **[追記]フィールドの取得にenumとそれに伴うエクステンションを記述するのは面倒なので他の安全なフィールドの取得方法を提供いたします。ごらんください。**
130
+
131
+
132
+
133
+ ### [追記] 内部で処理が必要で外部に値の取得のみ公開したい場合
134
+
135
+ **プロパティを使う**
136
+
137
+ プロパティは自動実装プロパティ(シンタックスシュガー)を持っていてスレッドセーフなgetter setterを簡単に記述できます。これを使うことで内部で処理しつつ必要な情報を外部に公開できます。
138
+
139
+
140
+
141
+ ```C#
142
+
143
+ private static string ext1 = "weight";
144
+
145
+
146
+
147
+ //1 取得getterのみ公開
148
+
149
+ public static string Ext1
150
+
151
+ {
152
+
153
+ get{
154
+
155
+ //取得される度に何か処理したい場合はここに記述する。
156
+
157
+ return ext1;
158
+
159
+ }
160
+
161
+ }
162
+
163
+
164
+
165
+ //2 取得getter 代入setterを公開
166
+
167
+ public static string Ext2
168
+
169
+ {
170
+
171
+ get{
172
+
173
+ return ext1;
174
+
175
+ }
176
+
177
+ set{
178
+
179
+ //valueに代入された値が入っています。
180
+
181
+ ext1 = value;
182
+
183
+ }
184
+
185
+ }
186
+
187
+
188
+
189
+ //3-1 短く書くとこういう感じでも書けます 初期化は別でしなければいけません。
190
+
191
+ public static string ext1_2
192
+
193
+ {
194
+
195
+ //代入を内部のみ許可する
196
+
197
+ get; private set;
198
+
199
+ }
200
+
201
+
202
+
203
+ //3-2 コンストラクタで初期化
204
+
205
+ public Setting()
206
+
207
+ {
208
+
209
+ ext1_2 = "weight";
210
+
211
+ }
212
+
213
+
214
+
215
+ //4 Unity 2017 で C# 6.0が使える環境ならこう書けます
216
+
217
+ public static string ext1_3{ get; private set; } = "weight";
218
+
219
+
220
+
221
+ //外部から取得する方法
222
+
223
+ Setting.Ext1
224
+
225
+ ```
226
+
227
+
228
+
229
+ ###値を定数化し外部に公開する
230
+
231
+ constまたはreadonlyを使うといいと思います。両方とも変更できない値(定数)を記述するキーワードです。違いがありますがここでは説明を省きます。
232
+
233
+
234
+
235
+ ```C#
236
+
237
+ public static readonly string ext1 = "weight";
238
+
239
+ public const string ext2 = "weight";
240
+
241
+
242
+
243
+ //外部から取得する方法
244
+
245
+ Setting.ext1
246
+
247
+ ```