C#基础知识

news2024/11/30 6:49:19

文章目录

  • 简介
  • 隐式显式转换
  • if
  • switch
  • 循环
  • 随机数
  • 方法
  • do while
  • static
  • 递归
  • 数组
  • foreach
  • var推断类型,父类
  • 二维数组,交错数组
  • 当方法参数类型确定,个数不确定时
  • 数据类型
    • 类型分类
  • 快捷方式
  • 函数参数:引用、输出参数
  • 装箱,拆箱
  • string
  • 储存地址
  • 枚举类型
  • 养成代码规范
  • 数组扩容
  • 集合
  • 字典
  • 类得继承
  • 共享数据
  • 获取二维数组不同方向的坐标
  • 结构

简介

C# 又称C shape。用Visual studio开发
推荐字体:
在这里插入图片描述
文本编译器-所有语言,设置显示行号
一个项目,打开,是打开sln文件

using System;
//using 引入命名空间,如果没有using,需要写成System.Console.WriteLine
//经常使用该类的时候,需要using.多个文件有相同名字的类,用Using的命名空间区分
//using的作用:对类进行逻辑上的划分,避免重名
//命名空间-类-方法
//定义命名空间【类的住址】
namespace Day01
{
    class Program
    {
        static void Main(string[] args)
        {
            //代码对齐ctrl+K+F,左手按住ctrl不放,右手先按K,再按F
            //注释ctrl+K+C
            //取消注释ctrl+K+U
            Console.Title = "俺的第一个程序";
            Console.WriteLine("你好,世界!");
            //从控制台输入文本
            string input = Console.ReadLine();
            Console.WriteLine(input);
            Console.ReadLine();//让程序在本行暂停
        }
    }
}

无符号数是8个位置全储存数据,有符号数就是7个位置储存数据。

char 加单引号,string加双引号。char c1=‘1’ string s1=“1” bool b=false b=1>2

变量:数字,字母,下划线,组成。不能是关键字如Int,不能数字开头。

建议:以小写字母开头,多个单词,第一个单词小写开头,其他首字母大写如:className,strAge

局部变量在使用前不许赋值。

bool b1=result==0.1f,先比较result是否等于0.1f,结果为bool型给b1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
调试的步骤
1.在可能出错的行,加断点,在左侧的灰色地带
2.按F5。启动调试
3.按F11,逐语句执行。在鼠标放变量上变量上,会显示值
4.按shift+F5停止调试
字符串的拼接,不方便分析。
console.write(“枪的名字是:”+gunName+“弹夹容量”+ammoCapacity);

推荐用占位符:{3},代表第3个变量。
string str=string.Format(“枪的名字为:{0},容量为:{1}”,gunName,ammoCapacity);

非整形float n2=1.0f,要加后缀
double n2=1.0不用加后缀
没加后缀会有提示。

看异常信息:1异常原因2位置
在这里插入图片描述
在控制台输出代码的占位符:Console.WriteLine(“金额:{0}”,10);

标注数字字符串格式化:{数字:C}
Console.WriteLine(“金额:{0:c}”,10);//货币,输出 金额:¥10.00

数字,不足2位时用0来填充
Console.WriteLine(“{0:d2}”,5);//05
Console.WriteLine(“{0:d2}”,15);//15

Console.WriteLine(“{0:f1}”,1.26);//1.3,根据指定精度,四舍五入显示
Console.WriteLine(“{0:p1}”,0.1);//10.0%,以百分数显示,小数点后位数是p后面的数字

//转义符,改变字符原始含义 "
Console.WriteLine(“我爱"unity”")输出:我爱”unity“

char c=‘’’ //输出: ’
char c2=‘\0’ // 空字符’’
Console.WriteLine(“你好,\r\n我是隔壁的\t老宋。”)//\r\n换行,\t是tab键。输出:你好,
我是隔壁的 老宋。
//源代码(.cs的文本文件)

bool r3=n1%20,怎么看, r3=(n1%20)

取整数的个位:int r=n1%10,取个位
逻辑运算符:&& || !

console.WriteLine(n++)//结果自增以前
console.WriteLine(++n)//结果自增以后
三元
string stro1=1>2?“OK”:“NO”

string 转换成其他数据类型,待转的数据必须像该数据类型
string strNumber=“18”
int num01=int.Parse(strNumber);//18
float num02=float.Parse(strNumber);//18.0

任意类型转换为string类型
int num=18;
string str=num.ToString();

获取每一位,方案一:
//取string的某一位
string str=“1234”
char c1=str[0];//1

个位:int re=num%10;
十位:int re=num/10%10;
百位:int re=num/100%10;

如果求每一位的和,可以直接写成
个位:int re=num%10;
十位:int re+=num/10%10;
百位:int re+=num/100%10;

字符转字符串:
char c1=‘e’;
sting s1=c1.ToString();
获取每一位,方案二:
在这里插入图片描述

隐式显式转换

隐式转换(由小范围到大范围)
byte b3=100;
int i3=b3;
但是反过来会报错:int i3=100;byte b3=i3;得用显示转换,又可能有精度得丢失(由大范围到小范围)byte b3=(byte)i3
因为byte是8位,int是32位

byte b=1;
b+=3;//不会报错,因为快捷运算符,不做自动类型提升
b=b+3;会报错,用显式转换

byte b=250;
b+=6;//结果为0,因为byte存0~255
//b+=7;//结果为1
在这里插入图片描述

if

if(sex==“男”)
{
Console.WriteLine(“您好,先生!”);
}else{
}

if(***)
b++;//受if控制
console.write;//不受if控制,而且会隔开之后的else if。所以if后有多个语句,用{}框起来

switch

switch(op)
{
case “+”:
re++;
break;
case"-":
re–;
break;
case “1”:
case “2”:
case “3”:
re=1;
break;//op为1,2,3都会执行
default:
re=0;
break;
}
不一定一定要用break,也可以用return返回方法,顺便也退出了switch

循环

for(初始化;循环条件;增减变量){
}

for(int i=0;i<5;i++){//满足i<5才会进入循环体内

}
i++先执行i再++;
++i先加,再执行;
i++和++i对下一跳指令都没区别,是加了之后的效果。

for(int i=0;i<5;){//满足i<5才会进入循环体内
//语句
i++;
}
for(int i=3; ;i++)//循环体能否执行,取决于中间,中间为空,相当于true,进入死循环。
{
}
for(int i=0;i<5;){
//语句
continue;//跳过本次循环,本次循环的后面全部语句不执行,直接进入下一次循环
i++;
}

while(条件){//满足条件才可进入循环,适用于只知道判断条件,不知道循环次数的情况
}
不建议用goto 语句
while(true){
if(条件)
break;
}
在这里插入图片描述

随机数

Random random=new Random();//创建一个随机数工具,本句放在方法外面,类里面
int num=random.Next(1,101);//产生一个随机数,本句放在方法里面
在这里插入图片描述

方法

在这里插入图片描述

没有返回值的方法也可以些return;但是return后面不能跟数据。
return的作用:1返回值,2退出方法。return执行后,它后面的代码不会执行。
void表示无返回值,可以不写return.

函数定义时的参数是形参,函数调用时的参数是实参。两者的类型,顺序,个数要意义对应。
string str=“我叫戎狄!”
str=str.Insert(4,“吗”);在第4个位置插入0我1叫2戎3狄4,我叫戎狄吗!

int index=str.IndexOf(“我”);返回0.查找指定字符在字符串中的索引。
int index=str.IndexOf(“戎”);返回2.查找指定字符在字符串中的索引。
在这里插入图片描述

Remove(2)删除位置2及以后的字符
Replace(‘我’,‘你’);用你来替代我
StartsWith(“我叫”)从开始比较是否一致,返回bool

如何定义方法
在这里插入图片描述
上面的方法不好,因为方法应该只做一件事,上面有获取数据,数据处理。而且上面的方法只能用在控制台,要尽可能使方法走在哪都能用,能复用。应该:
在这里插入图片描述

Console.Write写不换行
Console.WriteLine写并换行

在方法上敲三个/,注释
在这里插入图片描述
在这里插入图片描述
\n换行
\t相当于敲了一个Tab键
1代码要能复用,用调方法的方式,防止代码修改的工作量
2防止代码量太大,层次不清晰
方法名称写成一个,但是参数不一样。可以在不同情况下调用,使用者只需要记住一个函数名字。调用时,会通过参数去区分。即:方法的重载:方法名称相同,参数列表不同,作用:在不同条件下,解决同一类问题,让调用者仅仅记忆一个方法
在这里插入图片描述
在这里插入图片描述

do while

do
{
}while(count<5)
条件放后面,会先执行一下循环体,再判定

static

在C#程序中,没有全局变量的概念
静态变量必须使用类名来引用,而不能使用类的实例,因为,静态变量不属于任何实例,而是共有的

静态方法与静态变量一样,不属于任何特定的实例,属于类全体成员共有,由类名来调用。但要注意以下几点:
静态方法只能访问类的静态成员,不能访问类的非静态成员;
非静态方法可以访问类的静态成员,也可以访问类的非静态成员;
静态方法不能使用实例来调用,只能使用类名来调用。

递归

方法内部又调用自身的过程
核心思想:将问题转移给范围缩小的子问题
范围不能再缩小的情况为方法结束的判定
在这里插入图片描述
一层一层得执行GetFactorial等到有返回了,就一层一层得相乘。
使用时,尽量用循环,能不用递归就不用递归。缺点:性能较差,每次执行都要开辟空间,内存消耗比较大。
一般考试喜欢考递归,原因,优点:因为它可以让复杂问题,简单化。
注意:方法内部调用自身,要防止堆栈溢出,即需要有判定条件return;
在这里插入图片描述

数组

首先放的是数据类型的默认值。
下标从0开始。
int型,容量6,下标最多是5.
在这里插入图片描述
在这里插入图片描述
for循环满足条件才++,可以把i++放在循环体内,而不是for语句那
在这里插入图片描述
初始化+赋值

声明+初始化+赋值
在这里插入图片描述
new float[3]{“a”,“b”}会报错,因为前面已经说了有3个元素,后面也得有3个元素,前后一致。
new float[]{“a”,“b”}可以省略【】中的数字
在这里插入图片描述
sort是从小到大排序,如果需要从大到小排序,再调用一下反转reverse
在这里插入图片描述
判断数组中是否存在这个元素,如果不存在,IndexOf会返回-1
在这里插入图片描述
IndexOf会返回第一个数据的下标,当有多个相同数据,时,如果想返回最后一个数据的下标用:
在这里插入图片描述

foreach

用此循环更简单。从头到尾读取数据。如果要从尾到头,或从中间开始,或跳着读取,foreach就不行,得用for循环。
foreach得优点:使用简单
缺点:如果要从尾到头,或从中间开始,或跳着读取,foreach就不行,得用for循环。
在这里插入图片描述

var推断类型,父类

//适用性:数据类型名称较长,用var使代码简洁
不适合:全篇都var,代码可读性不好

foreach(var item in array){
}
可以声明父类类型,赋值子类对象
在这里插入图片描述
万类之祖:object
在这里插入图片描述
返回值是数组的方法:
在这里插入图片描述

二维数组,交错数组

在这里插入图片描述
在这里插入图片描述
交错数组:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
遍历交错数组的所有元素
在这里插入图片描述
或者
在这里插入图片描述

当方法参数类型确定,个数不确定时

1用数组
在这里插入图片描述

在这里插入图片描述

2 加params ,参数数组
对方法内部而言就是个普通数组,
对于方法外部(调用者),可以传递数组,可以传递一些数据类型相同的变量(传的是一大堆数,但方法看到的是一个数组),甚至可以不传递参数(方法看到的是个0个元素的数组)
作用:简化调用者,调用方法的代码。
在这里插入图片描述
在这里插入图片描述

数据类型

在这里插入图片描述

类型分类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
arr2和arr是指向的同一个内存地址,改变arr会同时改变arr2所以方法参数是数组的,需要改变数组时,可以不用写返回值。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

快捷方式

F12 跳转到方法或类的定义。
调用方法时,只写一个(,会提示写什么参数。不要一下子写个()

函数参数:引用、输出参数

引用参数,作用改数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
按值传递,引用传递的函数参数,传递之前前,必须赋值,不然会报错。
但是函数的输出参数,传递之前可以不赋值。但是函数内部必须给输出参数赋值
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

装箱,拆箱

避免装箱
在这里插入图片描述
不要写成
在这里插入图片描述
在这里插入图片描述
但是现在电脑的硬件性能很牛,拆装箱,该用就用,这点性能消耗很小,没问题。但是面试的时候会考。
在这里插入图片描述

在这里插入图片描述

string

在这里插入图片描述
字符串拼接不能这样干,会产生垃圾
在这里插入图片描述
字符串拼接,用,创建一个可变字符串。
每次修改都在同一个,内存空间内。
new StringBuilder()的框里,尽量写准确,有几个字符的空间。不然如果有更多的字符拼接,也能成功拼接上,但是会浪费更多的内存空间。
频繁对字符串操作(增加,替换,移除),需要用StringBuilder,如果只操作一次,就可以只用string。
在这里插入图片描述

储存地址

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

枚举类型

=0,=1可以不写
在这里插入图片描述
在这里插入图片描述
枚举能多选的操作:条件二的[Flags]是可写可不写。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

养成代码规范

类首字母大写,变量首字母小写。

比较便捷的set和get方法
真实开发时,不用写get和set方法,写个属性就行。如属性Name。如果类的外部不需要访问这个字段,就不需要写属性Name.
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
字段首字母小写,属性首字母大写。
在这里插入图片描述

如果有这种错误:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
函数的重载,变量名相同,参数不同。
在这里插入图片描述

数组扩容

因为数组初始化必须指定大小,且不可改变。调用数组数据必须指定下标。这两个弊端,所以引入
在这里插入图片描述

集合

数组只在容量确定,每次引用可以有确定下标时才用。不然就用集合。
在这里插入图片描述

字典

想快速得查找某一个数据,用字典效率更高
在这里插入图片描述

类得继承

子类能用父类得东西。父类只能用父类。父类要用子类,要强制转一下。protect修饰的变量,只能本家族使用,即本类和他得子类可以用。
在这里插入图片描述
在这里插入图片描述
父转子还能用:
在这里插入图片描述

共享数据

每个对象都操作的同一个数据。
比如可以用于类创建了多少个对象。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

获取二维数组不同方向的坐标

二维数组存储坐标,比如要获得a点左下角的坐标。创建一个derection类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Day08
{
    /// <summary>
    /// 方向
    /// </summary>
    struct Direction
    { 
        private int x;
        public int X
        {
            get
            { return x; }
            set
            { x = value; }
        }

        public int Y { get; set; }

        //结构体一定提供无参数构造函数
        //所以不能写无参数构造函数
        //public Direction()
        //{ } 

        public Direction(int x, int y):this()
        {//在构造函数中,必须先初始化所有字段 (可以使用无参数构造函数进行初始化)
            this.X = x;
            this.Y = y;
        }

        public static Direction Up
        {
            get
            {
                return new Direction(-1,0);
            }
        }

        public static Direction Down
        {
            get
            {
                return new Direction(1, 0);
            }
        }

        public static Direction Left
        {
            get
            {
                return new Direction(0, -1);
            }
        }

        public static Direction Right
        {
            get
            {
                return new Direction(0, 1);
            }
        }
    }
}

调用:Direction dir = Direction.Right;

结构

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/3130.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Netty入门——组件(Channel)二

目录一、channel的主要作用二、EventLoop处理io任务代码示例2.1、服务端代码示例2.2、客户端代码示例2.3、服务端和客户端查看控制台输出结果三、CloseFuture关闭问题代码示例3.1、服务端代码示例3.2、客户端代码示例3.3、服务端和客户端查看控制台输出结果3.4、CloseFuture关闭…

【C++ STL】-- deque与vector相比的优势与劣势

目录 deque容器 与stack相比deque的优缺点&#xff1a; deque的迭代器 deque的成员函数 deque容器 deque的相关文档 deque与vector十分的相识。vector是单向开口的连续线性空间&#xff08;单向扩容&#xff09;&#xff0c;deque则是一种双向开口的连续线性空间&#xff…

GIC/ITS代码分析(9)中断应用实例之IPI中断

PPI中断为外设私有中断&#xff0c;在ARM64上arch_timer为PPI中断。这里以arch_timer为例&#xff08;代码位置drivers/clocksource/arm_arch_timer.c&#xff09;&#xff0c;作应用实例讲解。 先对ARM64通用定时器作简要介绍。通用定时器为Arm core提供标准定时器。通用定时器…

VSCode下载安装与使用教程

目录1. 打开官网进行下载安装2. 下载3. 安装4. 使用4.1 python extensions4.2 建立 python 工作区4.3 运行python代码的 3 种方法方法一&#xff1a;点击按钮方法二&#xff1a;右键菜单方法三&#xff1a;交互式解释器5. debug参考资料VSCode是一款免费开源的现代化轻量级代码…

【C++修炼之路】8. string类详解

每一个不曾起舞的日子都是对生命的辜负 C之string类本节目标1. string类概览1.1 string的由来1.2 string函数列表2.string常用接口1. 初始化2. string::npos3. c_str()4. 获取长度&#xff08;length、size)5. 容量&#xff08;size、capacity)6. 插入&#xff08;insert)7. 替…

牛客网-《刷C语言百题》第三期

✅作者简介&#xff1a;嵌入式入坑者&#xff0c;与大家一起加油&#xff0c;希望文章能够帮助各位&#xff01;&#xff01;&#xff01;&#xff01; &#x1f4c3;个人主页&#xff1a;rivencode的个人主页 &#x1f525;系列专栏&#xff1a;《C语言入门必刷百题》 &#x…

【HTML5期末大作业】制作一个简单HTML我的班级网页(HTML+CSS+JS)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

微信小程序 |从零实现酷炫纸质翻页效果

&#x1f4cc;个人主页&#xff1a;个人主页 ​&#x1f9c0; 推荐专栏&#xff1a;小程序开发成神之路 --【这是一个为想要入门和进阶小程序开发专门开启的精品专栏&#xff01;从个人到商业的全套开发教程&#xff0c;实打实的干货分享&#xff0c;确定不来看看&#xff1f; …

保姆级透明背景动画导出 —— json格式(Mac系统)

日常能想到的小动画基本就是使用ps导出GIF动画/AE通过插件直接导出GIF&#xff0c;方便快捷&#xff1b;但最近工作中遇到了关于透明背景导出GIF动画的问题&#xff1a;导出的GIF动画有白边&#xff0c;有锯齿感。 网上找了一大堆教程&#xff0c;主要原因出在GIF格式本身的问…

黑马程序员Java实战项目--- ATM系统

项目介绍与功能演示 黑马银行ATM系统技术选型分析&#xff1a; 学习本项目&#xff0c;你将至少得到如下收获&#xff1a; 1、优秀的面向对象编程能力。 2、 清晰、缜密的业务、数据分析能力。 3、熟练使用程序流程技术来控制计算机完成自己的想法。 4、形成良好的编码习惯…

【面试题】移除数组删除重复项合并数组

1️⃣ 原地移除数组中所有的元素val 【OJ链接】 2️⃣ 删除排序数组中的重复项 【OJ链接】 3️⃣ 合并两个有序数组 【OJ链接】 1️⃣ 原地移除数组中所有的元素val 题目要求是要在数组中&#xff0c;把指定的数字全部去除&#xff0c;题目中也是强调了空间复杂度要求为O(1)&am…

项目经理要“谋定而后动,知止而有得,万事皆有法,不可乱也”

出自《大学》&#xff0c;“谋定而后动&#xff0c;知止而有得”的含义为谋划准确周到而后行动&#xff0c;知道目的地&#xff08;合适的时机收手&#xff09;才能够有所收获。 谋定而后动是告诉我们做任何事一定要进行谋划部署&#xff0c;做好准备&#xff0c;我们才能开始行…

数据结构作业:时间复杂度和二叉树

计算时间复杂度&#xff1a; int x0,i,j; 1 for(i1;i<n;i) n { for(j1;j<2*i;j) 2(n-1) { x; 2(n-1)*n } } 2(n-1)*n2n^2-2n 修改后的运行次数函数中&#xff0c;只保留最高阶项。 所以时间复杂度为 &#xff1a;…

老生常谈的商城系统(Asp.Net+uniapp)

真正的大师,永远都怀着一颗学徒的心&#xff01; 最近几天合肥是真热 这时候就应该宅在家里 吃着西瓜 啃着鸭脖 喝着啤酒 刷着剧 想想也太美好了吧 哈哈 我得醒醒 写完这篇推荐 吃吃喝喝去了 一、项目简介 今天推荐一款商城系统&#xff0c;虽然比较老生常谈了&#xff0…

【项目】若依框架如何实现批量导入,并解析出表中内容返回给前端? - poi依赖

文章目录实现效果&#xff1a;具体实现步骤&#xff1a;扩展实例内容&#xff1a;poi工具包ExcelHandlerAdapter接口ExcelUtil.java代码controllerserviceserviceImplmapper.javamapper.xmlTnProductProperty.java实现效果&#xff1a; 点击“导入excl”按钮 --> 弹出“文件…

MSDC 4.3 接口规范(27)

MSDC 4.3 接口规范&#xff08;27&#xff09;7.4.4 代码7.4.5 更新组呼业务7.4.5.1 接口函数7.4.5.2 先决条件7.4.5.3 说明7.4.5.4 调用流程7.4.6 其他信息通知7.4.6.1 组呼服务停止7.4.6.1.1 接口函数7.4.6.1.2 先决条件7.4.6.1.3 说明7.4.6.1.4 调用流程7.4.6.2 SAI 列表更新…

Nginx禁止文件下载防止服务器被恶意扫描

比如将网站数据库导出到站点根目录进行备份&#xff0c;很有可能也会被别人下载&#xff0c;从而导致数据丢失的风险。以下规则可以防止一些常规的文件被下载&#xff0c;可根据实际情况增减。我们可以通过以下俩种方法来防止服务器被恶意扫描&#xff0c;其中以彼之道&#xf…

ffmpeg解复用FLV文件

该博文是基于&#xff1a; ffmpeg&#xff1a;V 5.1.2 FLV格式是H2.64视频和aac音频复用得到的格式&#xff0c;我们所说的FLV解复用就是将FLV格式的数据的H2.64视频帧和aac音频帧分离。 分离完成后&#xff0c;音频是纯数据无法播放&#xff0c;需要添加ADTS头&#xff0c;视频…

浅谈基于以太网的煤矿电力监控系统的设计与应用

王兰 安科瑞电气股份有限公司 上海嘉定 201801 摘 要&#xff1a;针对传统煤矿电力监控系统通讯网络性能较差、无法实现准确故障定位及报警、不具备数据交互功能等问题&#xff0c;结合分布式网络及GPS授时技术设计了一套基于工业以太网及RS485总线架构的煤矿电力监控系…

第二十三课.扩散模型

目录概述前向过程逆向过程DDPM概述 近几年扩散模型不断涌现&#xff0c;但都来源于一个基础模型&#xff1a;DDPM&#xff08;Denoising Diffusion Probabilistic Model&#xff09;。扩散模型本质是生成模型&#xff0c;过去我们常用的生成模型包括GAN和VAE&#xff0c;利用随…