質問: new データ処理; d2.処理1(d1); // ←ここでd1の配列データを渡すために、 d2.処理2(d1); // d1(クラス)を引数で渡すことになる設計は正しいのか? d2.処理3(d1); // データ処理のクラス内では、d1.d_data とアクセスしています。 ... } ``` ベストアンサーを付ける形のようなので、 tkow様に付けさせていただきましたが、 どの方の回答も非常に参考になります。 概略を書かせていただきますと、 unau様は 大きな枠組みでのクラス設計や実装 tkow様は クラス設計に加え、コンテキスト処理を含めたスマートな記述法 tkturbo様は クラスのインスタンスにおける static の利用やメモリの節約法 などが勉強できますので、後からこの質問を参照する方は、 概要を参考に回答を見ていただけると良いかもしれません。
回答: ``` public void データ読み込み (string ファイル名) ``` 細かいことを言うと、こういう処理はstaticでやったほうが処理が早かったりします。 また、この構成だと「Class データ読み書き」がデータの保持もしてしまっているので、 ``` // インスタンス変数 public string d_data = new string [1000]; //データ用配列 (実際は十数個) public long d_size = 0; // 実際に読み込んだファイルの行数 // インスタンスを生成するstaticメソッド public static データ読み書き データ読み込み結果取得(string ファイル名){ データ読み書き d = new データ読み書き(); // 省略 while (sr.Peek() > -1) { d.d_data[d.size] = sr.Readline(); // データ用配列にファイル内容を読み込む d.size++; // 読み込んだ行数をインクリメント - 処理のほうで最終行を知るのに使用 } return d; } ``` のように取り扱うとよいかも。 あとは呼び出し側で ``` データ読み書き d1 = データ読み書き.データ読み込み結果取得(ファイルA); // データ用配列に読み込む データ読み書き d2 = データ読み書き.データ読み込み結果取得(ファイルB); // データ用配列に読み込む データ読み書き d3 = データ読み書き.データ読み込み結果取得(ファイルC); // データ用配列に読み込む ``` みたいにしてやるとd1,d2,d3に読み込み済みデータとデータ行数が設定された状態で取得できますね。 これを対象の処理に引数渡しする分には何も問題ないと思いますが。 ``` // データ処理クラス側の定義 Class データ処理 { public void 処理1 (データ読み書き d) { for(int i = 0; i < d.size; i++){ // 各行に対する処理1; } return; } // 略:以下、使う側の記述 処理1(d1); // ファイルAの読み込み結果に対して処理1を実行 ```