C# 为什么我们必须将值从派生类构造函数传递给基类构造函数
为什么先调用基类构造函数?如果在基类中定义了参数化构造函数,那么派生类构造函数必须将值从派生类传递给基类构造函数 我想知道为什么它是强制性的?如果未向基类构造函数传递任何值,则编译器将给出错误消息,说明“未给出与所需形式参数相对应的参数”C# 为什么我们必须将值从派生类构造函数传递给基类构造函数,c#,inheritance,constructor,C#,Inheritance,Constructor,为什么先调用基类构造函数?如果在基类中定义了参数化构造函数,那么派生类构造函数必须将值从派生类传递给基类构造函数 我想知道为什么它是强制性的?如果未向基类构造函数传递任何值,则编译器将给出错误消息,说明“未给出与所需形式参数相对应的参数” 我不是问我是否必须将这些值传递给基类,但我的问题是为什么我必须这样做?为什么要首先调用基类构造函数?您已经回答了自己的问题: 众所周知,基类构造函数在派生类构造函数之前被调用 由于基类只有一个必须接受参数的构造函数,因此在调用它时必须提供此参数 如果您的基类有
我不是问我是否必须将这些值传递给基类,但我的问题是为什么我必须这样做?为什么要首先调用基类构造函数?您已经回答了自己的问题: 众所周知,基类构造函数在派生类构造函数之前被调用 由于基类只有一个必须接受参数的构造函数,因此在调用它时必须提供此参数 如果您的基类有一个无参数的构造函数,那么编译器会很乐意使用
public s(int k):base()
,甚至只使用public s(int k)
(因为base()
将在编译时隐式添加)
但是,由于您显式地为类
程序
编写了构造函数,因此编译器不提供默认的无参数构造函数,因此,实例化程序
类的唯一方法是调用它的唯一构造函数并传递相关参数。这不是继承的副作用吗?这是继承的工作方式,您从基础派生。可能是优秀答案的重复。写得很漂亮。非常清楚,不用担心。我不知道你到底是怎么被否决的!
namespace Sample
{
public class Program
{
static int x;
public Program(int Y) {
x = Y;
Console.WriteLine("one value base class constructor called");
}
static void Main(string[] args)
{
Program prog = new s(10);
Console.ReadKey();
}
}
public class s: Program {
public s(int k):base(10)
{
Console.WriteLine("derived class constructor called");
}
}
}