网站首页 > 技术文章 正文
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#面向对象编程的重要一步。
猜你喜欢
- 2025-01-16 C#13和 .NET9高级功能解析:.NET高手必备技能
- 2025-01-16 C#使用Autofac实现控制反转IoC和面向切面编程AOP
- 2025-01-16 C#设计模式(3)——工厂方法模式
- 2025-01-16 C# - 面向对象知识总结 082
- 2025-01-16 c#简单工厂、抽象工厂、反射
- 2025-01-16 C# 13 和 .NET 9 全知道 :9 处理文件、流和序列化 (1)
- 2025-01-16 Effective C++ 条款07 为多态基类声明virtual析构函数
- 2025-01-16 C# 数据结构和算法 :03 数组和排序(五)
- 2025-01-16 从零开始自学C#基础的最后一天——集合
- 2025-01-16 多态 C#
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)