使用C#,提供代码internal class Program { private static void Main(string[] args) { Console.WriteLine("Hello, World!"); } },实现以下功能有一个抽象类Shape,派生类有Rectangle和Circle。定义一个面积计算委托,并在Program类中对一个Shape数组(包含矩形和圆形)计算总面积。 本题涉及到面向对象、继承、抽象类、委托等知识,比较综合和典型。如果能解答,就掌握了C#中级程度的编程思想和技能。 提示: 可定义一个抽象Shape类和两个派生类Rectangle、Circle。其中Area属性为抽象的,在派生类中进行override。 可定义一个CalculateArea委托类型和SumArea方法,该方法接收一个Shape数组和CalculateArea委托作为参数,使用委托对数组中的每个Shape计算面积并求和。 在Main方法中,创建一个包含矩形和圆形的Shape数组。然后创建一个CalculateArea委托实例,代表访问Area属性获取面积。最后调用SumArea方法传入数组和委托,完成总面积的计算和打印。
时间: 2024-02-15 08:01:17 浏览: 60
好的,以下是代码实现:
```csharp
using System;
namespace ShapeCalculator
{
//定义抽象类Shape
abstract class Shape
{
public abstract double Area { get; }
}
//定义Rectangle类
class Rectangle : Shape
{
public double Width { get; set; }
public double Height { get; set; }
public override double Area
{
get { return Width * Height; }
}
}
//定义Circle类
class Circle : Shape
{
public double Radius { get; set; }
public override double Area
{
get { return Math.PI * Radius * Radius; }
}
}
class Program
{
//定义委托类型CalculateArea
delegate double CalculateArea(Shape shape);
//定义SumArea方法
static double SumArea(Shape[] shapes, CalculateArea calculateArea)
{
double sum = 0;
foreach (var shape in shapes)
{
sum += calculateArea(shape);
}
return sum;
}
static void Main(string[] args)
{
//创建一个包含矩形和圆形的Shape数组
Shape[] shapes = new Shape[2];
shapes[0] = new Rectangle() { Width = 2, Height = 3 };
shapes[1] = new Circle() { Radius = 1 };
//创建一个CalculateArea委托实例
CalculateArea calculateArea = new CalculateArea((shape) => { return shape.Area; });
//调用SumArea方法传入数组和委托,完成总面积的计算和打印
double totalArea = SumArea(shapes, calculateArea);
Console.WriteLine("Total area: {0}", totalArea);
}
}
}
```
运行结果为:
```
Total area: 9.28318530717959
```
其中,矩形的面积为 2 * 3 = 6 ,圆形的面积为 π * 1 * 1 = 3.14159265358979323846 ,总面积为 6 + 3.14159265358979323846 = 9.28318530717959 。
阅读全文