classPreSet  这个类就是个对象池   把类手动添加到对象池太麻烦了。

解决方案 »

  1.   

    OOP是用来设计的,不是仅仅用来玩儿代码的。OOP把分类、继承、多态做为基本的三大特性,怎么可能没有方法和属性的抽象功能?
      

  2.   

    意思                意思就是预定义很多格式的类 这些类并不是要在运行时给怎么样。   而是要提前定义各自的id各自的初始化 序列化  反序列话。   这几个步骤有规律类似的。   所以想要把这些类似的给代换成统一的。    比如说分配id 这个得再类初始化中或之前把。还得知道其他类的id才能判断出这个类的id,而运行中初始化时是没法获取其他类的。
      

  3.   

       你看这个能用泛型简化吗
      public static void registmsginfo(int poolsize = 2, MSGType registid = MSGType.none)
            {
                if (registid == MSGType.none)
                {
                    for (int i = 0; i < msgtypespool.Length; i++)
                    {
                        msgtypespool[i] = new Queue<MSGBase>();
                    }
                }
                for (int i = 0; i < poolsize; i++)
                {
                    if (registid == MSGType.MSGSample || registid == MSGType.none)
                    {
                        msgtypespool[(int)MSGType.MSGSample].Enqueue(new MSGSample());  //...
                    }
                    if (registid == MSGType.MSGVersion || registid == MSGType.none)
                    {
                        msgtypespool[(int)MSGType.MSGVersion].Enqueue(new MSGVersion());
                    }
                    if (registid == MSGType.MSGLogin || registid == MSGType.none)
                    {
                        msgtypespool[(int)MSGType.MSGLogin].Enqueue(new MSGLogin());
                    }
                    if (registid == MSGType.MSGPlayerInfo || registid == MSGType.none)
                    {
                        msgtypespool[(int)MSGType.MSGPlayerInfo].Enqueue(new MSGPlayerInfo());
                    }                if (registid == MSGType.MSGStart || registid == MSGType.none)
                    {
                        msgtypespool[(int)MSGType.MSGStart].Enqueue(new MSGStart());
                    }
                    if (registid == MSGType.MSGCreateRoom || registid == MSGType.none)
                    {
                        msgtypespool[(int)MSGType.MSGCreateRoom].Enqueue(new MSGCreateRoom());
                    }
                    if (registid == MSGType.MSGDestroyRoom || registid == MSGType.none)
                    {
                        msgtypespool[(int)MSGType.MSGDestroyRoom].Enqueue(new MSGDestroyRoom());
                    }
                    if (registid == MSGType.MSGGetScore || registid == MSGType.none)
                    {
                        msgtypespool[(int)MSGType.MSGGetScore].Enqueue(new MSGGetScore());
                    }
                    if (registid == MSGType.MSGScore || registid == MSGType.none)
                    {
                        msgtypespool[(int)MSGType.MSGScore].Enqueue(new MSGScore());
                    }
                    if (registid == MSGType.MSGPlayerLost || registid == MSGType.none)
                    {
                        msgtypespool[(int)MSGType.MSGPlayerLost].Enqueue(new MSGPlayerLost());
                    }
                    if (registid == MSGType.MSGTarget || registid == MSGType.none)
                    {
                        msgtypespool[(int)MSGType.MSGTarget].Enqueue(new MSGTarget());
                    }
                    if (registid == MSGType.MSGSkill || registid == MSGType.none)
                    {
                        msgtypespool[(int)MSGType.MSGSkill].Enqueue(new MSGSkill());
                    }
                    if (registid == MSGType.MSGDead || registid == MSGType.none)
                    {
                        msgtypespool[(int)MSGType.MSGDead].Enqueue(new MSGDead());
                    }
                    if (registid == MSGType.MSGReLife || registid == MSGType.none)
                    {
                        msgtypespool[(int)MSGType.MSGReLife].Enqueue(new MSGReLife());
                    }
                }
            }
      

  4.   

    MSGType这个参数本身就不需要。
    直接传Type类型。然后反射创建实例。
      

  5.   


    这个是网络上获取的类型id  。  要从这个MSGType来知道实例化那个类的。  所以必须要啊。 反射这个待我在研究下。 我只知道我这个方法是id 和类型的 1对1 映射。 看起来跟反射有点像。
      

  6.   

    你是说知道一个类的 Type 信息 可以实例化这个类吗? 该怎么写呢
      

  7.   

    你是说知道一个类的 Type 信息 可以实例化这个类吗? 该怎么写呢
                Type stringType = typeof(string);
                string str = Activator.CreateInstance(stringType, '-', 16) as string;
                //same as
                //string string = new string('-', 16);
      

  8.   

    你是说知道一个类的 Type 信息 可以实例化这个类吗? 该怎么写呢
                Type stringType = typeof(string);
                string str = Activator.CreateInstance(stringType, '-', 16) as string;
                //same as
                //string string = new string('-', 16);
    这个好用 记下了。
    Activator 还这个方法。CreateInstance(String, String)  这个不知道执行效率如何。看它的描述是要查找的有没有超过log(1)的复杂度。  看见查找感觉速度堪忧啊。