【发布时间】:2018-01-17 14:08:16
【问题描述】:
在让我的班级通过二进制序列化之后,任何对另一个类中断的静态实例的引用。 这个例子应该更好地解释我的意思:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace staticorsingletontest
{
[System.Serializable]
public class weapon
{
public string name;
public weapon (string name)
{ this.name = name; }
}
class Program
{
public static weapon sword = new weapon("Sword");
public static weapon axe = new weapon("Axe");
static void Main(string[] args)
{
byte[] b;
Dictionary<weapon, int> WarriorSkills = new Dictionary<weapon,int>();
Dictionary<weapon, int> Des = new Dictionary<weapon,int>();
WarriorSkills.Add(sword, 10);
using (MemoryStream ms = new MemoryStream())
{
//Serialize
new BinaryFormatter().Serialize(ms, WarriorSkills);
b = ms.ToArray();
//Deserialize
ms.Flush();
ms.Write(b, 0, b.Length);
ms.Seek(0, SeekOrigin.Begin);
Des = (Dictionary<weapon, int>)new BinaryFormatter().Deserialize(ms);
}
Console.WriteLine(WarriorSkills.Keys.ToArray()[0].name + " is a " + Des.Keys.ToArray()[0].name + ", but are they equal? " + (WarriorSkills.Keys.ToArray()[0] == Des.Keys.ToArray()[0]).ToString());
Console.ReadLine();
Console.WriteLine("Warrior's Skill with Sword is ", Des[sword]); //wonderful "KeyNotFoundException" error
Console.ReadLine();
}
}
}
程序抛出一个错误,因为反序列化的“剑”不是同一个“剑”(它的static,这是怎么回事?)
将weapon 设置为singleton 是行不通的,因为那样剑和斧头就是一回事了。
有没有办法指出两把剑是同一件事,或者我没有得到static类的一些核心逻辑?
【问题讨论】:
标签: c# serialization static singleton binary-serialization