gpt4 book ai didi

c# - 将派生类引用传递给基类引用

转载 作者:行者123 更新时间:2023-11-30 17:58:39 25 4
gpt4 key购买 nike

Pass a derived class reference to a base class reference

这是否意味着从派生类调用基类,如构造函数三角形将调用基类?

class Shape {
public int width, height;
public Shape(int x) {
width = height = x;
}
}

class Triangle : Shape {
public string style;
public Triangle(int x) : base(x) {
style = "isosceles";
}
}

最佳答案

是的,它将指示运行时在 Triangle 之前调用该基本 Shape 构造函数。

逻辑按以下顺序执行:

  1. 执行形状(int x)
  2. 执行三角形(int x)

因此,您可以直接调用不同的构造函数重载(如果有的话)。另请注意,如果您的基类具有无参数构造函数,则如果您未指定,则本质上会添加一个隐式 base()。这意味着如果您的基类没有有一个无参数构造函数,所有子类必须创建一个有效的base(...parameters...)在他们的构造函数中。

此外,您可以使用 this() 而不是 base 来针对当前子类类的构造函数。

public class MyBaseClass
{
public MyBaseClass()
{
Console.WriteLine("MyBaseClass Parameterless");
}

public MyBaseClass(string message)
{
Console.WriteLine("MyBaseClass Message: " + message);
}
}

public class MySubClass
{
public MySubClass()
{
Console.WriteLine("MySubClass Parameterless");
}

public MySubClass(string message)
: base(message)
{
Console.WriteLine("MySubClass Message: " + message);
}

public MySubClass(bool someUselessFlag)
: this()
{
Console.WriteLine("MySubClass bool someUselessFlag constructor");
}
}

输出将是:

var a = new MySubClass();
//outputs:
//MyBaseClass Parameterless
//MySubClass Parameterless

var b = new MySubClass("Hello World!");
//outputs:
//MyBaseClass Message: Hello World!
//MySubClass Message: Hello World!

var c = new MySubClass(true);
//outputs:
//MyBaseClass Parameterless
//MySubClass Parameterless
//MySubClass bool someUselessFlag constructor

构造函数自身链接,直到它们最终调用 Object() 基础构造函数。这就是 var c = new MySubClass(true) 调用两个以上构造函数的原因。

关于c# - 将派生类引用传递给基类引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12018595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com