简而言之,在 C# 中,我无法理解这部分

In C # in a nutshell, I can't understand this part

您可以将表达式传递给另一个构造函数,如下所示:

using System;

public class Wine{

public decimal Price;
public int Year;
public Wine(decimal price){Price = price;}

public Wine(decimal price, int year) : this(price) {Year = year;}

public Wine(decimal price, DateTime year) : this (price, year.Year) {}

}

在书中-“您调用它的任何方法都可能失败。但是,它可以调用静态方法。

我的问题是“为什么”?

语句 this(price) 调用了一个 重载的构造函数初始值设定项

考虑到这一点,我是这样阅读这句话的:

Any [instance] methods [belonging to the constructed class] that you call [in the constructor initializer] are likely to fail. [Constructor initializers] can, however, call static methods.

为什么会这样?

  1. 实例方法很可能会失败,因为它们依赖于对象的内部状态,但尚未构造对象。 (构造函数初始值设定项 运行 构造函数主体之前。)
  2. 静态方法没问题,因为它们没有对尚未构造的对象的引用。 (他们无权访问其内部状态 - 静态方法中没有 this。)