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");
}
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
