网站首页 > 技术文章 正文
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-12 抽象基类,一个非常实用但容易被忽视的宝藏Python知识点
- 2025-01-12 Java 中使用抽象类实现接口的作用及方法解析
- 2025-01-12 复习java接口和抽象类的作用与区别
- 2025-01-12 接口和抽象类的区别
- 2025-01-12 自定义类加载器实现及在tomcat中的应用
- 2025-01-12 抽象函数的8类常考题型
- 2025-01-12 面试官:总结一下接口与抽象类的区别,聊聊关于类的名词
- 2025-01-12 Java的抽象类与举例说明
- 2025-01-12 抽象类和接口的区别
- 2025-01-12 深刻理解 接口vs抽象类的区别?
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- js数组插入 (83)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)