加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么我们需要base()关键字

发布时间:2020-12-15 20:06:35 所属栏目:百科 来源:网络整理
导读:我正在阅读一些代码而不了解基础工作.阅读一些例子,但他们没有解释我的问题. 两者都给出相同的输出.为什么我们需要base()? 没有基础的代码 class B : A{ public B() { Console.WriteLine("B"); }}class A{ public A() { Console.WriteLine("A"); }}class te
我正在阅读一些代码而不了解基础工作.阅读一些例子,但他们没有解释我的问题.

两者都给出相同的输出.为什么我们需要base()?

没有基础的代码

class B : A
{
    public B()
    {
        Console.WriteLine("B");
    }
}
class A
{
    public A()
    {
        Console.WriteLine("A");
    }
}
class test
{
    static void Main()
    {
        A a = new A();
        B b = new B();
        Console.ReadLine();

    }
}

VS

带有基础的代码

class B : A
{
    public B():base()
    {
        Console.WriteLine("B");
    }
}
class A
{
    public A()
    {
        Console.WriteLine("A");
    }
}
class test
{
    static void Main()
    {
        A a = new A();
        B b = new B();
        Console.ReadLine();

    }
}

解决方法

在您的示例代码中,没有必要,因为如果您没有指定一个,编译器将隐式调用默认构造函数.但是,假设您在基类中有两个构造函数:

class A
{
    public A()
    {
        Console.WriteLine("A");
    }

    public A(string foo)
    {
        Console.WriteLine(foo);
    }
}

现在您可以指定要调用的基类构造函数:

class B : A
{
    public B() : base("Foo")
    {
        Console.WriteLine("B");
    }
}

此外,如果您的基类缺少默认构造函数(或者如果该构造函数不可访问它的保护级别),则需要在子类中指定一个:

class A
{
    public A(string foo)
    {
        Console.WriteLine(foo);
    }
}

class B : A
{
    // Error: 'A' does not contain a constructor that takes 0 arguments
    public B()
    {
        Console.WriteLine("B");
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读