文字列でプロパティを参照するのはおすすめしません。
問題が起きた際に特定が困難になるからです。
面倒ですがenumと拡張メソッドを実装するのがおすすめです。
C#
1//[注意] staticクラスにしました
2static class Setting
3{
4 public static string ext1 = "weight";
5
6 //プロパティーを参照するenum拡張メソッド
7 public static string getProperty(this settingProperty type)
8 {
9 switch(type)
10 {
11 case settingProperty.ext1:
12 return ext1;
13 }
14
15 return string.Empty;
16 }
17}
18
19//enumを定義
20enum settingProperty
21{
22 ext1
23}
24
25class MainScript
26{
27 private void main()
28 {
29 this.method1( settingProperty.ext1 );
30 }
31
32 private void method1(settingProperty type)
33 {
34 Debug.Log( type.getProperty() );
35 }
36}
Settingをstaticクラスにしない場合は別途静的クラスにenumの拡張メソッドを実装する必要があります。
C#
1static class settingPropertyEx
2{
3 //プロパティーを参照するメソッド
4 public static string getProperty(this settingProperty type)
5 {
6 switch (type)
7 {
8 case settingProperty.ext1:
9 return Setting.ext1;
10 }
11
12 return string.Empty;
13 }
14}
[追記]フィールドの取得にenumとそれに伴うエクステンションを記述するのは面倒なので他の安全なフィールドの取得方法を提供いたします。ごらんください。
[追記] 内部で処理が必要で外部に値の取得のみ公開したい場合
プロパティを使う
プロパティは自動実装プロパティ(シンタックスシュガー)を持っていてスレッドセーフなgetter setterを簡単に記述できます。これを使うことで内部で処理しつつ必要な情報を外部に公開できます。
C#
1private static string ext1 = "weight";
2
3//1 取得getterのみ公開
4public static string Ext1
5{
6 get{
7 //取得される度に何か処理したい場合はここに記述する。
8 return ext1;
9 }
10}
11
12//2 取得getter 代入setterを公開
13public static string Ext2
14{
15 get{
16 return ext1;
17 }
18 set{
19 //valueに代入された値が入っています。
20 ext1 = value;
21 }
22}
23
24//3-1 短く書くとこういう感じでも書けます 初期化は別でしなければいけません。
25public static string ext1_2
26{
27 //代入を内部のみ許可する
28 get; private set;
29}
30
31//3-2 コンストラクタで初期化
32public Setting()
33{
34 ext1_2 = "weight";
35}
36
37//4 Unity 2017 で C# 6.0が使える環境ならこう書けます
38public static string ext1_3{ get; private set; } = "weight";
39
40//外部から取得する方法
41Setting.Ext1
###値を定数化し外部に公開する
constまたはreadonlyを使うといいと思います。両方とも変更できない値(定数)を記述するキーワードです。違いがありますがここでは説明を省きます。
C#
1public static readonly string ext1 = "weight";
2public const string ext2 = "weight";
3
4//外部から取得する方法
5Setting.ext1
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/26 03:14