C#编程:探索封装、继承与多态
需积分: 50 43 浏览量
更新于2024-09-10
收藏 7KB TXT 举报
"C#封装继承多态的基本概念和示例代码"
在面向对象编程中,C#中的封装、继承和多态是三个核心概念。封装是将数据和操作这些数据的方法绑定在一起,形成一个独立的单元,即类。继承则是子类继承父类的属性和方法,使得代码重用变得更加高效。多态则允许我们使用一个接口调用不同对象的同名方法,从而实现更灵活的设计。
在这个例子中,`Shape` 类作为抽象基类,代表了所有形状的公共属性和行为。`Shape` 类包含三个私有成员变量:`_perimeter`(周长)、`_area`(面积)和`_shapeName`(形状名称)。通过使用访问修饰符 `protected`,这些变量可以被子类访问,但不能被类外部的代码直接访问,实现了封装。
类中定义了 `Perimeter`、`Area` 和 `ShapeName` 的 `get` 和 `set` 访问器,提供了对这些私有变量的读写操作。`Shape` 类还包含两个虚方法:`PrintPerimeter` 和 `PrintArea`,用于打印形状的周长和面积。虚方法可以被子类重写,以实现特定形状的行为。
`CalculatePerimeter` 和 `CalculateArea` 方法是抽象方法,使用 `abstract` 关键字标记。这意味着任何继承自 `Shape` 类的子类必须提供这两个方法的实现,因为抽象方法不包含具体实现。这展示了多态性的一个关键特性,即子类可以扩展或改变父类的行为。
下面是一个可能的子类 `Circle` 的示例:
```csharp
public class Circle : Shape
{
public Circle(double radius)
{
this.ShapeName = "圆";
this.Radius = radius;
}
private double _radius;
public double Radius
{
get { return _radius; }
set { _radius = value; }
}
public override double CalculatePerimeter()
{
return 2 * Math.PI * _radius;
}
public override double CalculateArea()
{
return Math.PI * _radius * _radius;
}
}
```
在这个例子中,`Circle` 类继承了 `Shape` 类,并提供了 `CalculatePerimeter` 和 `CalculateArea` 的具体实现。`Circle` 类还添加了一个 `Radius` 属性,表示圆的半径,进一步展示了封装的概念。
现在我们可以创建 `Circle` 对象,并调用其 `PrintPerimeter` 和 `PrintArea` 方法,它们会根据 `Circle` 类的实现来计算和打印实际的周长和面积。这就是多态性的一个实例:同一个方法调用(`PrintPerimeter` 和 `PrintArea`)在不同的对象上会有不同的行为,取决于对象的实际类型。
总结来说,这个例子展示了C#中封装、继承和多态的核心概念,通过抽象基类 `Shape` 和其子类 `Circle` 的设计,演示了如何在实际编程中应用这些原则。通过这种方式,我们可以构建出可扩展、易于维护的面向对象程序。
2023-08-04 上传
2023-10-25 上传
点击了解资源详情
2023-05-19 上传
2023-07-13 上传
u013898571
- 粉丝: 0
- 资源: 7
最新资源
- 深入浅出:自定义 Grunt 任务的实践指南
- 网络物理突变工具的多点路径规划实现与分析
- multifeed: 实现多作者间的超核心共享与同步技术
- C++商品交易系统实习项目详细要求
- macOS系统Python模块whl包安装教程
- 掌握fullstackJS:构建React框架与快速开发应用
- React-Purify: 实现React组件纯净方法的工具介绍
- deck.js:构建现代HTML演示的JavaScript库
- nunn:现代C++17实现的机器学习库开源项目
- Python安装包 Acquisition-4.12-cp35-cp35m-win_amd64.whl.zip 使用说明
- Amaranthus-tuberculatus基因组分析脚本集
- Ubuntu 12.04下Realtek RTL8821AE驱动的向后移植指南
- 掌握Jest环境下的最新jsdom功能
- CAGI Toolkit:开源Asterisk PBX的AGI应用开发
- MyDropDemo: 体验QGraphicsView的拖放功能
- 远程FPGA平台上的Quartus II17.1 LCD色块闪烁现象解析