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` |

相关推荐
gCode Teacher 格码致知7 小时前
Javascript提高:get和post等请求,对于汉字和空格信息进行编码的原则-由Deepseek产生
开发语言·前端·javascript·node.js·jquery
竹林8187 小时前
从ethers.js迁移到Viem:我在一个DeFi项目前端重构中踩过的坑
前端·javascript
像我这样帅的人丶你还7 小时前
从交稿到甩锅预防:AI 前端流水线
前端·ai编程
想想弹幕会怎么做7 小时前
如何构建一颗可交互的ui树?
前端
程序员陆业聪8 小时前
我见过的最反直觉的 Android 架构问题:UseCase 越多,项目越烂
前端
Arya_aa8 小时前
网络:前端向后端发送网络请求渲染在页面上,将EasyMock中的信息用前端vue框架编写代码,最终展示在浏览器
前端·vue.js
LlNingyu8 小时前
文艺复兴,什么是CSRF,常见形式(一)
前端·安全·web安全·csrf
晓13138 小时前
React篇——第三章 状态管理之 Redux 篇
前端·javascript·react.js
子兮曰8 小时前
🚀24k Star 的 Pretext 为何突然爆火:它不是排版库,而是在重写 Web 文本测量
前端·javascript·github
@大迁世界8 小时前
11.在 React.js 中,state 与 props 的差异体现在哪里?
前端·javascript·react.js·前端框架·ecmascript