お世話になっております。
実装でちょっと困ったことがあり相談に乗っていただければと思います。
以下は現在書いているプログラムのダミーになりますが、今までstatic classで以下のように共通の変数を持たせていました。
(アクセサなどは適当です。動作確認していませんのであくまで例示コードだと思って補間していただけると助かります)
C#
1 2//Params.cs 3static class Params{ 4 public int a{get;set;}=0; 5 public double b{get;set;}=0; 6 7} 8 9//A.cs 親クラス 10using static Params; 11class A { 12 B b; 13 double aValue{get;set;} 14 15 double someCalc{ 16 return a+aValue; 17 } 18 19} 20 21//B.cs 子クラス 22using static Params; 23class B { 24 25 double bValue{get;set;} 26 27 double someCalc{ 28 b = someOtherRewriteFunction(); //bの値を書き換えるメソッド 29 return a+b+bValue; 30 } 31} 32 33
しかし、この値は、serializeして保存することと最終的にAクラスのインスタンスごとに異なった値をとれた方が可用性がいいことに気づき、親クラスと子クラスから同じインスタンスを参照するように変更しようと思った所,staticでないクラスで書き直したところ以下のようになりました。
C#
1 2//Params.cs 3[serializable] 4class Params{ 5 public int a{get;set;}=0; 6 public double b{get;set;}=0; 7} 8 9//A.cs 10class A { 11 Params params {get;set;} 12 B b; 13 14 public A(){ 15 this.params = new Params(); 16 this.b = new B(params); 17 } 18 19 double aValue{get;set;} 20 21 double someCalc{ 22 return params.a+aValue; 23 } 24 25} 26 27//B.cs 28class B { 29 Params params {get;set;} 30 public B(Params params){ 31 this.params = params; 32 } 33 double bValue{get;set;} 34 35 double someCalc{ 36 params.b = someOtherRewriteFunction(); //bの値を書き換えるメソッド 37 return params.a+params.b+bValue; 38 } 39} 40 41
実際はParamsクラスの値を使用するメソッドが大量にあるので、引数を増やさないようにしたかったのでこうなりました(そもそも値もその時点で持っているものを計算で更新するので結局参照でもつ必要があるので引数不要だと思いました。)。この実装で問題点とかないでしょうか?もし他によりよい修正方法があれば教えていただきたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/01/23 02:07 編集
2017/01/23 02:14
退会済みユーザー
2017/01/23 07:36