【问题标题】:Overriding inheritance on intrinsic attributes in C#在 C# 中覆盖内在属性的继承
【发布时间】:2010-08-10 19:40:57
【问题描述】:

在尝试序列化我的类和子类时与一堆未捕获的异常作斗争之后,我终于明白了我的问题所在:当应用于基类时,[Serializable] 不会被子类继承。总的来说,我对 C# 属性仍然很模糊,但我明白,在创建自定义属性时,程序员能够启用属性的自动继承。

有没有办法覆盖[Serializable]的继承?有什么好的理由说明它没有从一开始就完成和/或一开始就这样做是个坏主意吗?我希望所述基类的所有子类都是可序列化的,因此必须将属性添加到我创建的任何新子类中似乎并不优雅。

谢谢!

【问题讨论】:

    标签: c# oop attributes class-attributes


    【解决方案1】:

    一开始没有这样做绝对有充分的理由 - 基类是可序列化的并不意味着派生类自然是可序列化的。

    见鬼,object 是可序列化的 - 如果继承了可序列化性,则意味着 .NET 中的每个类都将是可序列化的 :)

    您也不能“覆盖”它 - 您必须在每个类中指定它。实际上,我认为这是一件好事 - 当您添加属性时,您应该对类进行心理检查并检查它是否真的确实序列化它有意义。

    【讨论】:

    • 对此有一个有趣的说明。实现ISerializable 的类也必须标记为SerializableAttribute。据推测,这允许运行时确定是否可以反序列化序列化元数据中引用的类型(因为此时没有该类型的实例可用)。
    • @Jimmy Hoffa,我认为 Jon 偶尔会提出一个错误的答案来打破正确的单调。然而,经过进一步检查,事实证明错误的答案也是正确的。
    • 谢谢乔恩,这很清楚。我实际上不知道 Object 实现了 [Serializable],所以这对我来说也是新闻!我想为每个新课程输入一些额外的字符不会杀死我。 ;)
    猜你喜欢
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 2013-12-04
    • 2011-03-21
    • 2023-03-13
    • 1970-01-01
    相关资源
    最近更新 更多