构造函数中的 C# 默认值与序列化的两个构造函数相同

Posted

技术标签:

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

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

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

这是否等同于

  public MyClass()  .... 
  public MyClass(string description)  .... 

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

【问题讨论】:

这也取决于序列化程序。许多序列化程序不需要构造函数。任何构造函数。 【参考方案1】:

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

当你写作时:

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

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

【讨论】:

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

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

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

【讨论】:

以上是关于构造函数中的 C# 默认值与序列化的两个构造函数相同的主要内容,如果未能解决你的问题,请参考以下文章

c# 中的类和构造函数在不同程序集中的 c# 中的默认访问说明符是啥 [重复]

C#:如果一个类有两个构造函数,这些构造函数共享一些代码的最佳方式是啥? [复制]

unity中的构造函数

C#中子类构造函数中如何调用父类构造函数

C# 继承和默认构造函数

C# 构造函数总结