【问题标题】:In C # in a nutshell, I can't understand this part简而言之,在 C# 中,我无法理解这部分
【发布时间】:2021-08-25 08:08:17
【问题描述】:

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

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) {}

}

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

我的问题是“为什么”?

【问题讨论】:

  • 您在 it 上调用的任何方法都可能失败。 -> 定义 it
  • 你应该问作者。另请参阅this
  • 当您希望重用某些代码块时,可以使用这种构造函数重载模式,例如 - link
  • 也许(?)它是指调用构造函数内部的方法,这意味着调用静态方法应该没问题。也许……
  • 您指的是哪本书和哪一页/章节?

标签: c# methods constructor-overloading


【解决方案1】:

语句this(price) 调用了一个重载的构造函数初始化器

考虑到这一点,这就是我阅读报价的方式:

您[在构造函数初始化程序中]调用的[属于构造类]的任何[实例]方法都可能失败。但是,[构造函数初始值设定项] 可以调用静态方法。

为什么会这样?

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

【讨论】:

    猜你喜欢
    • 2018-05-23
    • 2021-08-29
    • 2019-09-20
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    • 2020-12-23
    相关资源
    最近更新 更多