基类的构造函数会被自动调用吗?

2023-12-10

class Person
{
    public int age;
    public Person()
    {
        age = 1;
    }
}

class Customer : Person
{
    public Customer()
    {
        age += 1;
    }
}

Customer customer = new Customer();

顾客的年龄是2岁吗?看起来无论如何都会调用基类的构造函数。如果是这样,为什么我们需要打电话base有时最后?

public Customer() : base()
{
    .............
}

这就是 C# 的工作原理。类型层次结构中每个类型的构造函数将按照“Most Base -> Most Derived”的顺序调用。

所以在你的特定实例中,它调用Person(), 进而Customer()在构造函数命令中。有时需要使用的原因base构造函数是指当前类型下面的构造函数需要附加参数。例如:

public class Base
{
     public int SomeNumber { get; set; }

     public Base(int someNumber)
     {
         SomeNumber = someNumber;
     }
}

public class AlwaysThreeDerived : Base
{
    public AlwaysThreeDerived()
       : base(3)
    {
    }
}

为了构建一个AlwaysThreeDerived对象,它有一个无参数构造函数。但是,那Base类型没有。因此,为了创建无参数构造函数,您需要向基本构造函数提供一个参数,您可以使用base执行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基类的构造函数会被自动调用吗? 的相关文章

随机推荐