与 Base Class 中的参数化构造函数相关的问题
Issue related to Parameterized Constructor in Base Class
使用继承时,我对构造函数有些困惑:
我有以下代码:
class Program
{
static void Main(string[] args)
{
ClassD obj = new ClassD(10);
Console.ReadLine();
}
}
class ClassA
{
public ClassA(int a)
{
Console.WriteLine("Constructor of ClassA");
}
}
class ClassB : ClassA
{
public ClassB(int a)
{
Console.WriteLine("Parameterized Constructor of ClassB");
}
}
class ClassC : ClassB
{
public ClassC(int a)
{
Console.WriteLine("Parameterized Constructor of ClassC");
}
}
class ClassD : ClassC
{
public ClassD(int a)
{
Console.WriteLine("Parameterized Constructor of ClassD");
}
}
当我写上面的代码时..编译器生成了 3 个错误说:
'ClassA' does not contain a constructor that takes 0 arguments
'ClassB' does not contain a constructor that takes 0 arguments
'ClassC' does not contain a constructor that takes 0 arguments
那么为什么会抛出这些错误??
是否有必要在 base class 中使用默认构造函数?
如果我不想在基础 class 中使用默认构造函数,但想在派生 class 中使用默认构造函数怎么办?
so why these errors throwing ??
这不是抛出错误。编译器显示编译错误。这样做是因为基础 class 上没有默认构造函数,并且您的派生 class 正在使用它需要的参数调用基础 class。
is it necessary to have default constructor in base class.
没有
what if i dont want default constructor in base class but want to have default constructor in derived class ?
然后您在派生 class 中提供默认构造函数,但它仍必须调用基础 class 并提供基础 class 构造函数所需的参数。
public ClassB() : base(0) // Or whatever value you want here for this default constructor
使用继承时,我对构造函数有些困惑:
我有以下代码:
class Program
{
static void Main(string[] args)
{
ClassD obj = new ClassD(10);
Console.ReadLine();
}
}
class ClassA
{
public ClassA(int a)
{
Console.WriteLine("Constructor of ClassA");
}
}
class ClassB : ClassA
{
public ClassB(int a)
{
Console.WriteLine("Parameterized Constructor of ClassB");
}
}
class ClassC : ClassB
{
public ClassC(int a)
{
Console.WriteLine("Parameterized Constructor of ClassC");
}
}
class ClassD : ClassC
{
public ClassD(int a)
{
Console.WriteLine("Parameterized Constructor of ClassD");
}
}
当我写上面的代码时..编译器生成了 3 个错误说:
'ClassA' does not contain a constructor that takes 0 arguments
'ClassB' does not contain a constructor that takes 0 arguments
'ClassC' does not contain a constructor that takes 0 arguments
那么为什么会抛出这些错误?? 是否有必要在 base class 中使用默认构造函数?
如果我不想在基础 class 中使用默认构造函数,但想在派生 class 中使用默认构造函数怎么办?
so why these errors throwing ??
这不是抛出错误。编译器显示编译错误。这样做是因为基础 class 上没有默认构造函数,并且您的派生 class 正在使用它需要的参数调用基础 class。
is it necessary to have default constructor in base class.
没有
what if i dont want default constructor in base class but want to have default constructor in derived class ?
然后您在派生 class 中提供默认构造函数,但它仍必须调用基础 class 并提供基础 class 构造函数所需的参数。
public ClassB() : base(0) // Or whatever value you want here for this default constructor