gpt4 book ai didi

c# - 调用派生类的非继承方法

转载 作者:行者123 更新时间:2023-11-30 19:24:30 26 4
gpt4 key购买 nike

我有这 5 个类。一个名为 Figura 的基类是一个抽象类,还有 4 个具体的派生类。

Classes

我必须创建一个大小为 8 的 Figuras 数组(两个 Cuadrado、两个 Rectangulo、两个 Triangulo 和两个 Circulo),所以我这样做了:

Figuras[] figuras = new Figuras[8];
figuras[0] = new Cuadrado(1);
figuras[1] = new Cuadrado(2);
figuras[2] = new Rectangulo(2, 1);
figuras[3] = new Rectangulo(6, 2);
figuras[4] = new Triangulo(1, 2, 2);
figuras[5] = new Triangulo(3, 3, 4);
figuras[6] = new Circulo(1);
figuras[7] = new Circulo(4);

然后我遍历数组以计算每个图形的面积和周长。当我尝试调用仅属于图 Circulo 的方法 calcularDiametro() 时,问题就来了。我该怎么做?

我尝试了以下但它不起作用。

foreach (Figuras f in figuras)
if (f is Circulo)
f.calcularDiametro();

如有任何帮助,我们将不胜感激。

最佳答案

您需要将其转换为 Circulo 才能调用 Circulo 特定方法:

foreach (Figuras f in figuras) 
{
if (f is Circulo)
(Circulo)f.calcularDiametro();
}

请注意,这有点浪费,因为它进行了两次类型检查(这是一项代价高昂的操作)。一种避免浪费的方法是使用 as:

foreach (Figuras f in figuras) 
{
Circulo circ = f as Circulo;
if (circ != null)
{
circ.calcularDiametro();
}
}

关于c# - 调用派生类的非继承方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35980387/

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