网站首页 > 技术教程 正文
1.1.1. 什么是抽象?
抽象是指隐藏细节,突出核心功能,使程序员专注于对象的主要功能。具体来说,抽象是将复杂系统的某些特性和行为提取出来,简化系统的设计和使用。
我们还是以电视遥控器为例来说明,
(1) 内部细节:电路板、红外线发射器等。
(2) 核心功能:打开电视、调节音量、换频道等。
但你只需按下按钮,电视就会执行相应的操作,而不需要了解遥控器内部的工作原理。这就是抽象,隐藏复杂的内部细节,突出简单的使用功能。
1.1.2. 实现抽象的两种方法
(1) 抽象类:不能实例化,可以包含抽象方法(没有实现的方法)和具体方法(有实现的方法)。
(2) 接口:定义一组方法和属性,没有实现,类可以实现多个接口。
1.1.3. 抽象类
抽象类使用 abstract 关键字定义。抽象类中可以包含抽象方法和具体方法。
abstract class Animal
{
// 抽象方法(没有方法体)
public abstract void MakeSound();
// 具体方法
public void Sleep()
{
Console.WriteLine("Sleeping...");
}
}
?
class Dog : Animal
{
// 实现抽象方法
public override void MakeSound()
{
Console.WriteLine("Bark");
}
}
?
class Program
{
static void Main()
{
Dog dog = new Dog();
dog.MakeSound(); // 输出:Bark
dog.Sleep(); // 输出:Sleeping...
}
}
1.1.4. 抽象类的特点
特点 | 解释 |
不能实例化 | 不能创建抽象类的对象。 |
可以包含具体方法 | 抽象类可以包含具体方法(有实现的方法)。 |
可以包含抽象方法 | 抽象类可以包含抽象方法(没有实现的方法)。 |
需要被继承 | 必须由子类继承并实现其抽象方法。 |
1.1.5. 接口
接口使用 interface 关键字定义,接口中只包含方法和属性的声明,没有实现。
interface IAnimal
{
void MakeSound();
}
?
class Cat : IAnimal
{
// 实现接口方法
public void MakeSound()
{
Console.WriteLine("Meow");
}
}
?
class Program
{
static void Main()
{
IAnimal cat = new Cat();
cat.MakeSound(); // 输出:Meow
}
}
1.1.6. 接口的特点
特点 | 解释 |
不能实例化 | 不能创建接口的对象。 |
没有实现 | 接口中的方法和属性没有实现。 |
需要被实现 | 必须由类实现接口中的所有方法和属性。 |
多重继承 | 一个类可以实现多个接口。 |
1.1.7. 抽象类 vs 接口
特点 | 抽象类 | 接口 |
实现 | 可以包含具体实现 | 不能包含具体实现 |
多重继承 | 不能多重继承 | 可以实现多个接口 |
字段 | 可以包含字段 | 不能包含字段 |
访问修饰符 | 可以使用访问修饰符 | 默认是 public,不能使用访问修饰符 |
1.1.8. 什么时候使用抽象类和接口?
使用抽象类:
(1) 当你需要为一组相关对象提供通用的基类,并包含一些共有的实现细节。
(2) 当你有一些方法需要在基类中实现,并且其他方法需要在派生类中实现。
使用接口:
(1) 当你需要为不相关的类提供一些通用行为。
(2) 当你需要实现多重继承时,因为C#不支持类的多重继承,但支持接口的多重实现。
1.1.9. 示例对比
1.1.9.1. 抽象类示例
abstract class Shape
{
public abstract double GetArea();
}
?
class Circle : Shape
{
private double radius;
?
public Circle(double radius)
{
this.radius = radius;
}
?
public override double GetArea()
{
return Math.PI * radius * radius;
}
}
?
class Program
{
static void Main()
{
Shape circle = new Circle(5);
Console.WriteLine(#34;Area of circle: {circle.GetArea()}");
}
}
1.1.9.2. 接口示例
interface IDrawable
{
void Draw();
}
?
class Square : IDrawable
{
public void Draw()
{
Console.WriteLine("Drawing a square");
}
}
?
class Program
{
static void Main()
{
IDrawable square = new Square();
square.Draw();
}
}
1.1.10. 总结
抽象通过隐藏对象的复杂性,只显示必要的功能,使程序员专注于对象的主要功能,忽略内部实现细节。C#通过抽象类和接口实现抽象,允许开发者创建灵活、易维护的代码。理解抽象类和接口的使用场景,是掌握C#面向对象编程的重要一步。
猜你喜欢
- 2024-09-27 理解事物的五种方式 对事物的理解三个层次
- 2024-09-27 一文“透析”论文中abstract和summary的区别
- 2024-09-27 抽象类(abstractclass)与接口(interface)有什么异同?
- 2024-09-27 功能设计:如何将复杂的功能抽象成简洁易用的设计?
- 2024-09-27 接口和抽象类 接口和抽象类描述正确的有
- 2024-09-27 功能设计2:如何将复杂的功能抽象成简洁易用的设计?
- 2024-09-27 C井中抽象类和抽象方法的使用方法!深入理解C井抽象类和抽象方法
- 2024-09-27 【每日一学】Python中的抽象类和抽象方法
- 2024-09-27 高中数学|抽象函数方法与技巧 高中抽象函数题型总结
- 2024-09-27 C#中的抽象类与抽象方法的区别 c#中抽象类的定义
你 发表评论:
欢迎- 05-1613步震撼淘宝大促闪光裂纹破墙立体字PS制作教程
- 05-16AI教程 | 绘制扁平的萌萌哒图标
- 05-160基础学平面设计所需了解的基础常识汇总
- 05-16自学平面设计需要多长时间?十六年职业设计总监告诉你
- 05-16平面设计都要学习哪些内容?
- 05-16李涛PS教程 高手之路PS教程 合成教程 —制作一个小星球
- 05-16Illustrator实例教程:制作炫酷的漩涡效果
- 05-16Illustrator实例教程:利用混合工具制作一朵炫酷的花
- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)