C#学习9——接口、抽象类

一、接口
1.什么是接口

官方话:是一种定义契约(一组方法、属性、事件或索引器的抽象声明)的机制,它规定了实现该接口的类或结构必须提供这些成员的具体实现。接口是面向对象编程中实现多态和抽象的重要工具。

个人理解:策划书(规定了需要实现什么功能)

2.接口定义

修饰符 interface 接口名

{

方法;

属性

}

3.接口的使用:
cs 复制代码
using System;

// 接口定义
interface IAnimal
{
    void Speak(); // 动物发声方法
}

// 实现类:狗
class Dog : IAnimal
{
    public void Speak() => Console.WriteLine("汪汪汪");
}

// 实现类:猫
class Cat : IAnimal
{
    public void Speak() => Console.WriteLine("喵喵喵");
}

class Program
{
    static void Main()
    {
        IAnimal dog = new Dog();
        IAnimal cat = new Cat();
        
        dog.Speak(); // 输出:汪汪汪
        cat.Speak(); // 输出:喵喵喵
    }
}

类似重写,但又不一样

一句话总结

  • 接口:"你必须能做这件事,但具体怎么做我不管"(如:所有厨师都要会做宫保鸡丁)。
  • 重写:"你爹是这么做的,但你可以改"(如:祖传宫保鸡丁要放花生,你可以改成放腰果)。
二、抽象类
1.什么是抽象类?

官方话语:抽象类是 C# 中一种特殊的类,它不能被实例化,主要用于作为其他类的基类(父类)。抽象类的核心特点是可以包含抽象方法(只有方法定义,没有实现),这些抽象方法必须由继承它的子类实现。

个人理解:带模板的策划书

2.定义抽象类

访问修饰符\] abstract class 类名 { // 抽象成员(必须由子类实现) \[访问修饰符\] abstract 返回类型 抽象方法名(参数列表); \[访问修饰符\] abstract 属性类型 抽象属性名 { get; set; } ... } ###### 3.使用抽象类: eg: ```cs // 抽象类:动物 abstract class Animal { public abstract string Sound { get; } // 抽象属性 public abstract void Speak(); // 抽象方法 public void Eat() => Console.WriteLine("吃东西"); // 普通方法 } // 子类:狗 class Dog : Animal { public override string Sound => "汪汪"; public override void Speak() => Console.WriteLine(Sound); } // 使用示例 Animal dog = new Dog(); dog.Speak(); // 输出:汪汪 dog.Eat(); // 输出:吃东西 ``` ##### 三、接口和抽象类的区别 | **抽象类** | **接口** | |---------------------|-----------------------------| | 可以包含抽象方法和普通方法 | 只能包含方法签名(不能有实现) | | 子类使用 `:` 继承一个抽象类 | 子类使用 `:` 实现多个接口 | | 用于定义一组相关类的共同行为和部分实现 | 用于定义不相关类的共同行为(如 "可打印""可排序") | | 关键字:`abstract` | 关键字:`interface` |

相关推荐
心中有国也有家44 分钟前
cann-recipes-infer:昇腾 NPU 推理的“菜谱集合”
经验分享·笔记·学习·算法
前端若水1 小时前
会话管理:创建、切换、删除对话历史
前端·人工智能·python·react.js
Upsy-Daisy1 小时前
AI Agent 项目学习笔记(八):Tool Calling 工具调用机制总览
人工智能·笔记·学习
Bigger1 小时前
mini-cc:一个轻量级 AI 编程助手的诞生
前端·ai编程·claude
无风听海1 小时前
C# 隐式转换深度解析
java·开发语言·c#
涵涵(互关)1 小时前
Naive-ui树型选择器只显示根节点
前端·ui·vue
BY组态1 小时前
Ricon组态系统最佳实践:从零开始构建物联网监控平台
前端·物联网·iot·web组态·组态
BY组态1 小时前
Ricon组态系统vs传统组态软件:为什么选择新一代Web组态平台
前端·物联网·iot·web组态·组态
SoaringHeart1 小时前
Flutter进阶:OverlayEntry 插入图层管理器 NOverlayZIndexManager
前端·flutter
LateFrames2 小时前
520 - 如何说晚安 (WPF)
c#·wpf·浪漫·ui体验