值传递和引用传递,ref的作用,序列化和反序列化

来源:互联网 发布:常用推荐算法 编辑:程序博客网 时间:2024/06/06 03:13

值类型:int double char decimal bool enum struct --->存储在栈中

(值类型在复制的时候传递的是这个值得本身)

字符串string 有不可变性,每次变化都在内存中开辟一个新的空间。

static void Main(string[] args)
        {
            string s1 = "张三";
            string s2 = s1;
            s2 = "李四";
            Console.WriteLine(s1);
            Console.WriteLine(s2);
            Console.ReadKey();
        }


引用类型:string 数组 自定义类 集合object 接口--->存储在堆中

(引用类型在复制的时候,传递的是对这个对象的引用)



ref:能够把一个变量以参数的形式带到一个方法中进行改变,再将改变的值返回

 class Program
    {
        static void Main(string[] args)
        {
            int n = 10;
            Test(ref n);
            Console.WriteLine(n);
            Console.ReadKey();           
        }


        public static void Test(ref int number)
        {
            number += 10;
        }
    }

方法中本来是没有返回值的,加了ref后number和n变成同一块内存空间(值传递改变为引用传递)


序列化:就是将对象转换为二进制

反序列化:就是将二进制转换为对象

作用:传输数据。

序列化步骤

1)、将这个类标记为可以被序列化的。在类的前面加上   [Serializable] --->指示一个类可以被序列化

例:将一个对象传递给对方的电脑(序列化) 对方电脑读取传递过来的对象(反序列化)

第一步:写一个类 在类的前面加上 [Serializable]  表示可以被序列化

   //先写一个类,在类的前面加上一个 [Serializable]
    [Serializable]
    public class Person
    {
        private string _name;


        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
        private int _age;


        public int Age
        {
            get { return _age; }
            set { _age = value; }
        }
        private char _gender;


        public char Gender
        {
            get { return _gender; }
            set { _gender = value; }
        }
    }

第二步:创建对象,序列化对象

static void Main(string[] args)
        {
            Person p = new Person();
            p.Age = 20;
            p.Name = "张三";
            p.Gender = '男';
            using (FileStream fsWrite = new FileStream(@"C:\Users\pzy\Desktop\123.txt", FileMode.OpenOrCreate, FileAccess.Write))
            {
                BinaryFormatter bf = new BinaryFormatter();
                bf.Serialize(fsWrite, p);//序列化对象P 并写入 123.txt 文档中
            }
            Console.WriteLine("OK了");
            Console.ReadKey();
        }

第三步:将123.txt 中的内容进行反序列化,还原对象 p

 static void Main(string[] args)
        {
            Person p;
            using (FileStream fsRead = new FileStream(@"C:\Users\pzy\Desktop\123.txt", FileMode.OpenOrCreate, FileAccess.Read))
            {
                BinaryFormatter bf = new BinaryFormatter();
                p=(Person)bf.Deserialize(fsRead);
            }
            Console.WriteLine(p.Age);
            Console.WriteLine(p.Name);
            Console.WriteLine(p.Gender);
            Console.ReadKey();
        }




























































0 0
原创粉丝点击