关于Using语句的一个重要的知识点

1.刚才我想将游戏信息保存下来,本来想保存在xml文件里,利用创建xml文件,添加节点的方式保存,刚做了一点,有个兄弟说可以使用序列化的方式将类直接保存为xml文件,然后就去实验如何操,发现了Using语句的一个问题:

2.先不管save和reder:这样调用以后,虽然序列化了,也可以读取,但是打开Xml文件发现里面没有数据,能读取,没有数据,说明数据还在内存中,对象没有释放,并没有刷新进入硬盘,而using语句绑定的对象是在语块执行完毕后自动释放的,说明using语句在主函数中绑定对象失效了,也就是说using语句绑定对象的用法,必须在一个单独的方法中,而不能再Main方法,如果要在Main方法使用必须在using语句块中显式的调用对象的Dispose()方法或者close()方法,经过测试,这是成功的。

3.另外一种就是比如save(),reder(),这样的写法,调用后自动释放,无需显式调用close和dispose。

4.查询官方文档要求将Using用法放在单独的方法中。

可以被序列化化保存的类:(注意类上面的特性[System.Serializable]可序列化标志

using System;
using System.IO;
using System.Xml.Serialization;

namespace Cshape操作XML文件
{
    [System.Serializable]
    public class GameInfo
    {
        public string str = "我爱你!";

        public GameInfo() { }

        public void save()
        {
            using (var stream = File.Open("1113.xml", FileMode.Create))
            {
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(GameInfo));
                xmlSerializer.Serialize(stream, this);
            }

            
           
        }

        public void Reder()
        {
            using (var strea = File.OpenRead("1113.xml"))
            {
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(GameInfo));
                var b = xmlSerializer.Deserialize(strea) as GameInfo;
                Console.WriteLine(b.str);
            }
        }

    }
}

这是主类:

using System;
using System.IO;
using System.Xml.Serialization;

namespace Cshape操作XML文件
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Console.WriteLine(new XMSerialization().GetType().ToString() + "1");
            Console.WriteLine(typeof(XMSerialization).ToString() + "2");

            var a = new GameInfo();

            using (var stream = File.Open("1115.xml", FileMode.Create))
            {
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(GameInfo));
                xmlSerializer.Serialize(stream, a);
            }
            using (var strea = File.OpenRead("1115.xml"))
            {
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(GameInfo));
                var b = xmlSerializer.Deserialize(strea) as GameInfo;
                Console.WriteLine(b.str);
            }

            Console.ReadKey();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/fbw668859/article/details/81153125