A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 许庭洲 黑马帝   /  2012-7-5 16:06  /  3264 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请高手指点,谈谈反射和序列化,反射和序列化在C#的具体意思和作用。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

4 个回复

倒序浏览
反射我也不懂,序列化略知一点.....

比如你玩某些游戏时,由于某种原因退出,但再重新进入游戏时,还是接着你刚刚退出前的;
这里面就用到了序列化和反序列化,序列化是将对象当前所有数据保存到本地磁盘,反序列化就是将本地磁盘的文件的数据加载到程序运行中对应的对象中;

序列化和反序列化操作:
   对于你需要保存的对象的类,在类开头做可序列化标记[Serializable](记住只要是要保存的都要做,父子类都要单独做);
给你一个序列化操作的类吧,就两个方法,你参考参考:
class FileOP
    {
        //文件保存的路径
        private string path;

        public FileOP(string path)
        {
            this.path = path;
        }
        /// <summary>
        /// 反序列化操作
        /// </summary>
        /// <returns>返回值为 object</returns>
        public Object LoadInfo()
        {
            FileStream fs = null;
            try
            {
                fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None);
                return new BinaryFormatter().Deserialize(fs);
            }
            finally
            {
                if(fs!=null) fs.Close();
            }
        }
        /// <summary>
        /// 序列化操作
        /// </summary>
        /// <returns>返回值为 object</returns>
        public void SaveInfo(Object obj)
        {
            FileStream fs = null;
            try
            {
                fs = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None);
                new BinaryFormatter().Serialize(fs, obj);
            }
            finally
            {
                if (fs != null) fs.Close();
            }
        }
    }

希望对你有所帮助

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
肖琦 发表于 2012-7-6 08:56
反射我也不懂,序列化略知一点.....

比如你玩某些游戏时,由于某种原因退出,但再重新进入游戏时,还是接 ...

太棒了,谢谢!
回复 使用道具 举报
c#中反射,实际上就是动态使用类库,可以通过名称来引用类及其成员。
序列化基本是指把一个对象保存到文件或流中,
可以把文件序列化以保存到Xml中,或一个磁盘文件中。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
正在学习序列化过程中,上面这个有帮助!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马