C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.86388 の関連記事表示

<< 0 >>
■86388  Re[1]: Listを使ったクラスへのアクセスについて
□投稿者/ 魔界の仮面弁士 -(2018/01/25(Thu) 14:45:33)
    No86386 (MTK さん) に返信
    >  ・buttonBasicクラス(すべてのボタンのスーパークラス)

    「名詞+形容詞」の語順のクラス名に違和感があります。

    クラス名が Pascal 形式ではなく camel 形式の命名ルールになっている点も
    あまり C# っぽくは無いですね。
    https://msdn.microsoft.com/ja-jp/library/ms229043.aspx


    なお、このクラスがスーパークラス専用で設計されている場合は、
    「class buttonBasic」ではなく
    「abstract class buttonBasic」となるのが良いでしょう。


    > そこで、以下のような構成でプログラムを作成しています。

    そことなく不自然さは感じますが、
    細かい仕様が分かっているわけではないので、
    この設計が妥当かどうかは判断できかねます。

    ただ少なくも現状のコードでは、mainMenus のインスタンス生成が漏れているので
    NullReferenceException 例外で停止してしまうことになるでしょうね。


    > public enum buttonEnum
    > private List<buttonBasic> mainMenus;
    > ただ、Addで追加していくと、後で「buttonCにアクセスしたいな」と思った時に
    > Listの何番目にあるのかが分かりません。

    せっかく列挙体にしても、List 内の位置で管理される仕様にしてしまっては、
    マジックナンバーによる管理と代わらないですし、使い難いかと思います。

    たとえば「List<buttonBasic>」という部分を
    「Dictionary<buttonEnum, buttonBasic>」に
    変更してみるのは如何でしょうか?

    そうすれば、利用時には
     // A を非表示にする
     mainMenus[buttonEnum.BUTTON_A].Hide();
    とか
     // B を保持しているかどうかを確認する
     if(mainMenus.ContainsKey(buttonEnum.BUTTON_B))
    とか
     // mainMenu に割り当て済みの buttonEnum の一覧を得る
     buttonEnum[] keys = mainMenus.Keys.ToArray();
    とか
     // mainMenu に割り当て済みの buttonBasic の一覧を得る
     buttonBasic[] buttons = mainMenus.Values.ToArray();
    とか
     // Visble プロパティが true なボタンだけを取り出す
     buttonBasic[] buttons = mainMenus.Values.Where(bs => bs.Visible).ToArray();
    とか
     // mainMenu に割り当て済みの情報をすべて列挙する
     foreach (var entry in mainMenus)
     {
      buttonEnum key = entry.Key;
      buttonBasic button = entry.Value;
      // (ここに処理を記述)
     }
    といったことができます。


    > private createButton(buttonEnum type)
    「private buttonBasic createButton(buttonEnum type)」
    にしないと文法違反ですよ。(static でも良いかな)
記事No.86386 のレス /過去ログ148より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -