gpt4 book ai didi

c# - OnSerializing/OnSerialized/OnDeserializing/OnDeserialized 为什么不是一个接口(interface)?

转载 作者:太空狗 更新时间:2023-10-30 00:08:52 26 4
gpt4 key购买 nike

我一直在阅读有关 .NET 中序列化的一些资料,并开始思考将 OnSerializing/OnSerialized/OnDeserializing/OnDeserialized 功能作为属性而不是接口(interface)来实现的主要原因是什么。我可以想到一些利弊,但我可能遗漏了一些重要的东西,所以我想知道什么是最重要的。

支持接口(interface):

  • 在编译时检查方法签名(在签名不正确的方法上使用属性会导致运行时异常)

  • 不能在类级别为单个事件声明两个方法(用相同的属性装饰两个方法会导致运行时异常)

支持属性:

  • 如果我们想对单个事件使用react,则无需声明 4 个方法

最佳答案

接口(interface)不会那么好,因为接口(interface)之上的层次结构中的每个类都无法自动提供自己的实现,除非:

  • 基类将方法声明为虚拟的
  • 每个派生类重新实现接口(interface)

然后是识别每个类的实现的额外复杂性 - 反射更难。

此外,一旦引入了接口(interface),这意味着层次结构中的所有类都是可序列化的,但情况并非总是如此,也不应该如此。从可序列化基派生非序列化类(在受控情况下)是完全正确的 - 但通过使用接口(interface)或虚拟方法可以有效地防止这种情况。

然后,属性的使用提供了最简洁、最具表现力且实际上最灵活的方式来实现序列化。

关于c# - OnSerializing/OnSerialized/OnDeserializing/OnDeserialized 为什么不是一个接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5316502/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com