[英]how to initialize all the base class objects from derived class using base keyword
以下代码通过调用派生类的基类构造函数,使用“ base”关键字初始化派生类的基类。
class A
{
public int a;
public int b;
public A(int x, int y)
{
a = x;
b = y;
}
}
class B : A
{
int c;
public B(int s, int n,int z)
: base(s, n)
{
c = z;
}
public int add()
{
return a + b+c;
}
}
class Program
{
static void Main(string[] args)
{
B b = new B(2, 3,5);
Console.WriteLine(b.add());//the output is 10 OK
}
}
如果派生类继承自多个基类会发生什么情况,然后如何使用基关键字(如何调用基类构造函数)初始化派生类中的所有基类。**
class A
{
public int a;
public int b;
public A(int x, int y)
{
a = x;
b = y;
}
}
class B:A
{
public int d;
public int e;
public B(int x, int y)
{
d = x;
e = y;
}
}
class C:B
{
}
然后从类C如何使用base关键字初始化两个基类。
一个类只能从一个基类继承。
如果您的基类继承自其他基类,则您的基类将像其他任何基类一样初始化其基类。
正如其他人所说,在.Net中,您只能从一个类继承,但是您可以实现大量接口。 区别以及如何实现类似于从多个类继承的效果,超出了此问题的范围。
在您的示例中(使用以前的代码示例作为标准),您将必须执行以下操作
class A
{
public int a;
public int b;
public A(int x, int y)
{
a = x;
b = y;
}
}
class B:A
{
public int d;
public int e;
public B(int x, int y): base (x, y)
{
d = x;
e = y;
}
}
class C:B
{
public C(int m, int n) : base(m, n)
}
这实际上将实例化C,然后调用C的构造函数,然后调用B的构造函数。
.Net中不允许从多个类继承。 (原因将导致钻石问题 )。 但是允许从多个接口和多级继承实现。
在第一段中,首先调用A的构造函数,然后调用B的构造函数。
在第二个片段中,首先将调用A的构造函数,然后调用B,再调用C的构造函数。
您可以在LINQPad中这样尝试:
下面的可复制复制代码(注意,由于}在奇数位置-linqpad的要求,因此在LinqPad中仅“有效”)
var test = new C(1, 2);
}
class A
{
public int a;
public int b;
public A(int x, int y)
{
a = x;
b = y;
Console.WriteLine("A");
}
}
class B : A
{
public int d;
public int e;
public B(int x, int y) : base(x, y)
{
d = x;
e = y;
Console.WriteLine("B");
}
}
class C : B
{
public C(int x, int y) : base(x, y)
{
Console.WriteLine("C");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.