📄 ex-21-16
字号:
// Example 21-16: Working with a nonserialized object
namespace Programming_CSharp
{
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
[Serializable]
class SumOf : IDeserializationCallback
{
public static void Main()
{
Console.WriteLine("Creating first one with new...");
SumOf app = new SumOf(1,5);
Console.WriteLine("Creating second one with deserialize...");
SumOf newInstance = SumOf.DeSerialize();
newInstance.DisplaySums();
}
public SumOf(int start, int end)
{
startNumber = start;
endNumber = end;
ComputeSums();
DisplaySums();
Serialize();
}
private void ComputeSums()
{
int count = endNumber - startNumber + 1;
theSums = new int[count];
theSums[0] = startNumber;
for (int i=1,j=startNumber + 1;i<count;i++,j++)
{
theSums[i] = j + theSums[i-1];
}
}
private void DisplaySums()
{
foreach(int i in theSums)
{
Console.WriteLine("{0}, ",i);
}
}
private void Serialize()
{
Console.Write("Serializing...");
// create a file stream to write the file
FileStream fileStream =
new FileStream("DoSum.out",FileMode.Create);
// use the CLR binary formatter
BinaryFormatter binaryFormatter =
new BinaryFormatter();
// serialize to disk
binaryFormatter.Serialize(fileStream,this);
Console.WriteLine("...completed");
fileStream.Close();
}
public static SumOf DeSerialize()
{
FileStream fileStream =
new FileStream("DoSum.out",FileMode.Open);
BinaryFormatter binaryFormatter =
new BinaryFormatter();
return (SumOf) binaryFormatter.Deserialize(fileStream);
fileStream.Close();
}
// fix up the nonserialized data
public virtual void OnDeserialization
(Object sender)
{
ComputeSums();
}
private int startNumber = 1;
private int endNumber;
[NonSerialized] private int[] theSums;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -