もちゅるの日常

特に決まっていないざっくばらんなブログ

何かいいデータ管理方法ないのやら

C++の時は管理をシングルトンにして、管理クラスにアクセスしたい場合はノードクラスを持たせてさせてたけど、C#だとどうすりゃいいかホントにわからん。
仕方なくっていうか開き直ってstaticオンパレードなデータパッケージクラスに必要リソース全部ぶち込んでる。

    public class DataPackage
    {
        // データ群
        static ResMan s_resMan = new ResMan();

        // ハンドラ
        delegate void AddNewModelEventHandler(string name, string path, int type);
        static event AddNewModelEventHandler OnAddNewModel;

        static bool AddNewModel(string name, string path, int type)
        {
            // 〜 略 〜
        }
    };

C#の場合、各フォームクラスに持たせるものなのか?それともDBなのか?はたまた何か妙手があるのやら。つーかC#ってC++/Cと比べて知らない用語が多すぎる。IDEのクイックヒントとかコメントにご丁寧に書いてあるのはいいんだけど、何言ってんだこいつってなってしまう。

もっと単純にできると思ったんだけどなぁ〜。


まあそのうち覚えるだろうし、構造周りもそのうち何とかなるだろう。そのへんはのんびり進める。

あれ?これでいけるかな?

削除タイミングが明示的に出来ないのが微妙だけど、C++と同じようにシングルトン作れるかも。

    public class ResMan
    {
        private static ResMan   s_instance = null;

        // リソースタイプ
        public enum RES_TYPE{
            RES_TYPE_Map,
            RES_TYPE_Hit,
        };
        // リソース情報
        public class RES_INFO
        {
            public string name;    // 名前
            public string path;    // パス
            public RES_TYPE type;  // タイプ
        };

        List<RES_INFO> m_resList;

        private ResMan()
        {
            m_resList = new List<RES_INFO>();
        }

        public static bool CreateInstance()
        {
            bool ret = false;
            if( s_instance == null ){
                s_instance = new ResMan();
                ret = true;
            }
            return ret;
        }
        public static ResMan GetInstance()
        {
            return s_instance;
        }
        public static void DeleteInstance()
        {
            // ?        
        }

        public bool AddRes(RES_INFO info)
        {
            bool ret = false;

            m_resList.Add(info);
            ret = true;

            return ret;
        }

        public int GetResNum()
        {
            return m_resList.Count();
        }

        public RES_INFO GetRes(int idx)
        {
            return m_resList[idx];
        }
        public RES_INFO FindRes(string name)
        {
            return m_resList.Find( (RES_INFO tgt) => { return (tgt.name == name); });
        }

    };