|
分類:[C#]
2018/01/25(Thu) 11:49:32 編集(投稿者) 2018/01/25(Thu) 11:48:44 編集(投稿者)
C# VS2015を使用
初投稿させて頂きます。 C#を2週間前から始めて、まだまだひよっこプログラマです。 現在、フォーム上に複数の機能のボタンを設置、管理するプログラムを作っています。 ログインユーザの権限情報により、どのボタンを表示するかが変わります。 そこで、以下のような構成でプログラムを作成しています。
Menu.cs (ボタンの情報を入れています 簡単な内容なので中身は省略) ・buttonBasicクラス(すべてのボタンのスーパークラス) ・buttonAクラス(buttonBasicクラスを継承) ・buttonBクラス(buttonBasicクラスを継承) ・buttonCクラス(buttonBasicクラスを継承) ・ ・ ・
MenuManager.cs(上記ボタンクラスをまとめて管理する)
// 各ボタンに数字を付けて管理 public enum buttonEnum { BUTTON_A = 0, BUTTON_B = 1, BUTTON_C = 2, BUTTON_D = 3, BUTTON_E = 4 }
class menuManager { private List<buttonBasic> mainMenus;
public menuManager() {
// 上記ボタンの内、ユーザ権限に合うものだけをListにする foreach (int n in Enum.GetValues(typeof(buttonEnum))) { if(権限チェック) { //【ここが問題!!!】 mainMenus.Add( createButton(n) ); } } }
// 引数に対応するボタンのインスタンスを生成して返す private createButton(buttonEnum type) { switch(type) { case buttonEnum.BUTTON_A: return new buttonA(); case buttonEnum.BUTTON_B: return new buttonB(); ・ ・ ・ } } }
上記プログラムの【ここが問題!!!】の部分で質問です。 ユーザの権限によって、必要なボタンをListに追加しています。 ただ、Addで追加していくと、後で「buttonCにアクセスしたいな」と思った時に Listの何番目にあるのかが分かりません。
Addじゃなくてinsertを使ってmainMenus.insert( n, createButton(n) ); という追加方法にすれば、buttonCにアクセスしたい場合はmainMenus[buttonEnum.BUTTON_C]とアクセスすればいいかなと思いましたが これは結構危険な実装になってしまうのではないかな?と不安です。
こういうことをしたい場合、どのように作るのが良いのでしょうか? また、上記のプログラムの構成についてもご指摘頂けると嬉しいです。 (例えばcreateButtonメソッドはmenuManagerクラス内じゃなくて、各ボタンクラスに作るべき?など) つたない説明で申し訳ないですが、よろしくお願いします。
|