在C#中,委托是一种能够引用一个或多个方法的对象,可以通过序列化和反序列化来保存和恢复委托的状态。下面是一个简单的示例,演示如何对委托进行序列化和反序列化:
using System; using System.IO; using System.Runtime.Serialization.Formatters.Binary; public delegate void MyDelegate(); [Serializable] public class DelegateContainer { public MyDelegate myDelegate; public DelegateContainer(MyDelegate del) { myDelegate = del; } } class Program { static void Main() { MyDelegate del = () => Console.WriteLine("Hello, world!"); // 序列化委托 DelegateContainer container = new DelegateContainer(del); BinaryFormatter formatter = new BinaryFormatter(); using (FileStream fs = new FileStream("delegate.dat", FileMode.Create)) { formatter.Serialize(fs, container); } // 反序列化委托 using (FileStream fs = new FileStream("delegate.dat", FileMode.Open)) { DelegateContainer deserializedContainer = (DelegateContainer)formatter.Deserialize(fs); deserializedContainer.myDelegate(); } } }
在上面的示例中,首先定义了一个委托MyDelegate
和一个包含委托的序列化容器DelegateContainer
。然后创建一个委托实例del
并将其保存在容器中,然后使用BinaryFormatter
来序列化容器对象并保存到文件中。接着再从文件中反序列化出容器对象,并执行委托。
需要注意的是,在进行委托的序列化和反序列化时,委托所引用的方法必须是可序列化的,否则会抛出异常。