gpt4 book ai didi

C# 继承和默认构造函数

转载 作者:IT王子 更新时间:2023-10-29 03:56:22 24 4
gpt4 key购买 nike

假设有一个基类A 和一个从A 派生的类B。然后,我们知道 A 类的构造函数永远不会被 B 类继承。但是,当 B 的新对象被创建时,类 A 的默认构造函数在类 B< 的默认/自定义构造函数之前被调用 被调用。也许这样做的目的是类A的字段需要初始化为默认值。

现在,假设类 A 定义了一个自定义构造函数。这意味着 A 类的默认构造函数被编译器静默删除。现在,在创建类 B 的新实例时,在调用类 B 的构造函数之前会自动调用类 A 的哪个构造函数? (在这种情况下,类 A 字段如何初始化?)

最佳答案

Now, on creating a new instance of class B, which constructor of class A is automatically called before invoking the class B constructor?

基本上,代码将无法编译。每个构造函数都必须隐式或显式地链接到另一个构造函数。它链接到的构造函数可以在同一个类中(使用 this)或基类(使用 base)。

像这样的构造函数:

public B() {}

是隐含的:

public B() : base() {}

... 如果您根本没有指定构造函数,它将以相同的方式隐式添加 - 但它仍然必须有一些东西可以调用。例如,您的场景:

public class A
{
public A(int x) {}
}

public class B : A {}

导致编译器错误:

error CS7036: There is no argument given that corresponds to the required formal parameter 'x' of 'A.A(int)'

但是,您可以显式指定不同的构造函数调用,例如

public B() : base(10) {} // Chain to base class constructor

public B() : this(10) {} // Chain to same class constructor, assuming one exists

关于C# 继承和默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29959839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com