【问题标题】:C# default value in constructor same as two constructors for serialization构造函数中的 C# 默认值与序列化的两个构造函数相同
【发布时间】:2011-12-22 04:34:14
【问题描述】:

当我为构造函数提供默认值时

  public MyClass(string description = null) { .... }

这是否等同于

  public MyClass() { .... }
  public MyClass(string description) { .... }

序列化而言。换句话说,默认构造函数是否可用?实际上是这样,但是我在使用序列化时会遇到一些问题吗?

【问题讨论】:

  • 这也取决于序列化程序。许多序列化程序不需要构造函数。任何构造函数。

标签: c# serialization constructor default-value


【解决方案1】:

没有。不幸的是,它不是默认构造函数。

当你写作时:

public MyClass(string description = null) { .... }

您实际上是在创建一个接受字符串参数但具有标记该属性的默认值的属性的构造函数。这与在类上使用默认构造函数不同。

【讨论】:

  • 完全正确。可选参数只是一个编译器技巧。它们只影响 CALLER,因此如果调用者省略参数,编译器将使用默认值。
【解决方案2】:

是的,在这种情况下你会遇到问题。

我试图通过反射调用你描述的构造函数,它抛出了 TargetInvokationException: (Argument count mismatch)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 2014-05-15
    相关资源
    最近更新 更多