Base Keyword在构造函数初始化中的作用是什么?

Ant*_*t's 6 c# constructor

我对baseC#中的关键字感到困惑.说我有这样的代码:

?class A
{
    ?// member declaration....
    A(int s, int t, int x)
    {
        ?// assign the values of members
    }
}

class B : A
{
    // member declaration....
    ?B(int a, int b, int c, int d) : base(a,b,c)
    {
        // does the base keyword play a role in
        // this constructor?
    }
}
?
Run Code Online (Sandbox Code Playgroud)

现在,构造函数中base关键字的确切用法是B什么?我有几个问题需要澄清:

  1. 使用base关键字将调用基类A构造函数(在我们的示例中)?它是否正确?
  2. base在派生类中提供关键字会改变派生类构造函数的行为吗?

基本上当base关键字应该在构造函数中使用时(一些例子会很好)?

编辑:

我有另一个问题.如何通过关键字告知base班级我们的derived班级base

提前致谢.

Cod*_*ter 7

我认为手册非常清楚base

base 关键字用于从派生类中访问基类的成员:

  • 调用基类上已被另一个方法重写的方法。

  • 指定创建派生类的实例时应调用哪个基类构造函数。

public class BaseClass
{
    int num;

    public BaseClass()
    {
        Console.WriteLine("in BaseClass()");
    }

    public BaseClass(int i)
    {
        num = i;
        Console.WriteLine("in BaseClass(int i)");
    }

    public int GetNum()
    {
        return num;
    }
}

public class DerivedClass : BaseClass
{
    // This constructor will call BaseClass.BaseClass()
    public DerivedClass() : base()
    {
    }

    // This constructor will call BaseClass.BaseClass(int i)
    public DerivedClass(int i) : base(i)
    {
    }

    static void Main()
    {
        DerivedClass md = new DerivedClass();
        DerivedClass md1 = new DerivedClass(1);
    }
}
Run Code Online (Sandbox Code Playgroud)
/*
Output:
in BaseClass()
in BaseClass(int i)
*/
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 6

是 - base链接到基类中的构造函数.

如果您没有指定basethis(链接到同一个类中的另一个构造函数),则效果就好像您已base()链接到基类中的无参数构造函数.在您的例子,这会导致编译失败是你的基类不具有参数的构造函数.

有关更多信息,请参阅有关构造函数的文章.