[英]Inheritence problem in C# without calling base class constructor
我想知道为什么我没有在下面的代码中收到错误。 我在基类中没有定义构造函数,但在派生类中定义了一个构造函数。 代码仍按预期运行。 有人可以帮助我摆脱困惑。
class Shape
{
public void Area()
{
Console.WriteLine("I am a shape");
}
}
class Circle : Shape
{
double radius;
const double pi = 3.14;
public Circle(double rad)
{
radius = rad;
}
public new double Area()
{
return pi * radius * radius;
}
}
代码编译完美,并给我想要的结果。 谢谢,
class Progam
{
static void Main(string[] args)
{
Shape s1 = new Shape();
s1.Area();
Shape s2 = new Circle(10);
s2.Area();
Circle c1 = new Circle(4.0);
Console.WriteLine(c1.Area());
}
}
如果没有定义其他构造函数,则会自动执行默认的基础构造函数(即没有参数)。
如果没有显式定义构造函数(如在您的问题中),则隐式定义默认构造函数
默认构造函数如果没有为类提供构造函数,则默认情况下C#会创建一个实例化对象并将成员变量设置为默认值表中列出的默认值。 如果没有为结构提供构造函数,C#依赖于隐式默认构造函数来自动将值类型的每个字段初始化为默认值表中列出的默认值。
参考: https : //docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/constructors
正如其他人所指出的,这里:
Shape s1 = new Shape();
你正在初始化你的Shape类。 您认为它没有意义,因为您没有定义构造函数,但由于您没有它,因此它已动态生成,因此程序不会中断。 因此,您的Shaple类执行如下:
class Shape
{
public Shape()
{
}
public void Area()
{
Console.WriteLine("I am a shape");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.