前提・実現したいこと
Dataクラスに格納された値を、Managerクラスを経由し、Formクラスに渡すプログラムを作成しています。
ManagerはDataとFormの値を仲介するだけで、値の加工は行いません。
FormがDataから値を取得する際に、以下の様な3つの方法を思いついたのですが、どの方法が正しいのか判断が付きません。
どの方法が正しいのか、もしくは、他に正しい値の渡し方があれば教えて下さい。
1、ManagerでDataの値を取得するメソッドを個別に作成し、Formから呼び出す。
2、outパラメータを使って、一括で呼び出す。
3、DataのインスタンスをFormに渡して処理する。
発生している問題・エラーメッセージ
それぞれで以下のような問題がありました。
1、『ManagerでDataの値を取得するメソッドを個別に作成し、Formから呼び出す』方法
→Managerクラスで、個別にメソッドを作るのが大変。
2、『outパラメータを使って、一括で呼び出す』方法
→引数が膨大になる。
3、『DataのインスタンスをFormに渡して処理する』方法
→一番楽だったが、この方法が正しいのかわからない。
実際のコードではDataクラスのフィールドが10~20程度あるので、1と2の方法はかなり難しいのではないかと思いました。
該当のソースコード
C#
1 // メインフォーム 2 public partial class Form1 : Form 3 { 4 Manager manager = new Manager(3); 5 6 int resultInt; // int型の結果 7 string resultString; // string型の結果 8 bool resultBool; // bool型の結果 9 10 public Form1() 11 { 12 InitializeComponent(); 13 ShowData(); 14 } 15 16 // 結果を表示する処理 17 public void ShowData() 18 { 19 // 個別にメソッドを呼び出す方法(方法1) 20 for(int i=0; i<3; i++) 21 { 22 resultInt = manager.GetDataInt(i); 23 resultString = manager.GetDataString(i); 24 resultBool = manager.GetDataBool(i); 25 Console.WriteLine($"【{i}】{resultInt},{resultString},{resultBool}"); 26 } 27 // outを使用して一括で値を取得する方法(方法2) 28 for (int i = 0; i < 3; i++) 29 { 30 manager.GetAllData(i, out resultInt, out resultString, out resultBool); 31 Console.WriteLine($"【{i}】{resultInt},{resultString},{resultBool}"); 32 } 33 // インスタンスを受け取る方法(方法3) 34 for (int i = 0; i < 3; i++) 35 { 36 var data = manager.GetClass(i); 37 38 resultInt = data.DataInt; 39 resultString = data.DataString; 40 resultBool = data.DataBool; 41 Console.WriteLine($"【{i}】{resultInt},{resultString},{resultBool}"); 42 } 43 44 } 45 }
C#
1 // DataクラスとFormクラスを仲介するクラス 2 class Manager 3 { 4 List<Data> data = new List<Data>(); // Dataインスタンスの格納用リスト 5 6 // コンストラクタ 7 public Manager(int value) 8 { 9 for(int i=0; i<value; i++) 10 { 11 data.Add(new Data(i)); 12 } 13 } 14 15 // int型の値を取得する処理(方法1) 16 public int GetDataInt(int number) 17 { 18 return data[number].DataInt; 19 } 20 21 // string型の値を取得する処理(方法1) 22 public string GetDataString(int number) 23 { 24 return data[number].DataString; 25 } 26 27 // bool型の値を取得する処理(方法1) 28 public bool GetDataBool(int number) 29 { 30 return data[number].DataBool; 31 } 32 33 // outを使用して一括で値を取得する処理(方法2) 34 public void GetAllData(int number, out int dataInt, out string dataString, out bool dataBool) 35 { 36 dataInt = data[number].DataInt; 37 dataString = data[number].DataString; 38 dataBool = data[number].DataBool; 39 } 40 41 // Dataのインスタンスを渡す処理(方法3) 42 public Data GetClass(int number) 43 { 44 return data[number]; 45 } 46 47 }
C#
1 // データを格納するクラス 2 class Data 3 { 4 public int DataInt { get; set; } 5 public string DataString { get; set; } 6 public bool DataBool { get; set; } 7 8 // コンストラクタ 9 public Data(int number) 10 { 11 DataInt = number; 12 DataString = number.ToString(); 13 DataBool = number > 0; 14 } 15 }
試したこと
特になし。