C#学习....

1.基础

//引用命名空间

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

//项目名或者命名空间
namespace _01_MY_First_Demo
{
    //Program类
    class Program
    {
        //程序的主入口或者Main函数
        static void Main(String[] agrs)
        {
            Console.WriteLine("Hello, World11!");
        }
    }
}

2.打印日志

 Console.WriteLine("Hello, World11!");
//让程序暂停
Console.ReadKey();
---------------------------------------
//输入数据
string  name=  Console.ReadLine();
Console.WriteLine(name);

3.注释

//  1.单行注释





2.多行注释 

/*
            Console.WriteLine("Hello, World11!");
            Console.WriteLine("Hello, World11!");
            Console.WriteLine("Hello, World11!");
            Console.WriteLine("Hello, World11!");
            Console.WriteLine("Hello, World11!");
            Console.WriteLine("Hello, World11!");*/



/// 3.文档注释 

 /// <summary>
 /// 这个方法的作用
 /// </summary>
 /// <param name="agrs">第一个参数</param>

4.快捷键

ctrl+k+c :注释所选代码

ctrl+k+u :取消注释所选代码

ctrl+k+d  :快速对齐代码

ctrl+j  :快速智能提示



 折叠没用代码

    #region  没用的代码
            //Console.ReadKey();
            //Console.ReadKey();
            //Console.ReadKey();
            //Console.ReadKey();
            //Console.ReadKey();
            #endregion

5.常见数据类型

在C#中,有以下常见的数据类型:

1. 值类型(Value Types):
   - 整数类型:`int`, `long`, `short`, `byte`, `sbyte`, `uint`, `ulong`, `ushort`
   - 浮点类型:`float`, `double`
   - 字符类型:`char`
   - 布尔类型:`bool`
   - 十进制类型/金钱类型:`decimal`

int A0 = 3;
float A1 = 520.1314131413141314F;
double A2 = 520.1314131413141314;
//用来存储金钱,后面要加个M
decimal A3 = 520.1314131413141314M;
Console.WriteLine(A1);
Console.WriteLine(A2);
Console.WriteLine(A3);

//用来存储单个字符,需要用单引号引起来。
char ch1 = 'B';//定义字符使用单引号
char ch2 = '\x0042';//使用十六进制编码来表示字符B
Console.WriteLine(ch1);
Console.WriteLine(ch2);
 

2. 引用类型(Reference Types):
   - 字符串类型:`string`
   - 数组类型:`int[]`, `string[]`, 等等
   - 类类型:自定义的类、结构体、枚举等
   - 接口类型:`interface`
   - 委托类型:`delegate`




3. 空类型(Nullable Types):
   - 可以为null的值类型,通过在值类型后面加上`?`来声明,例如:`int?`, `bool?`, `double?`

??用于判断一个变量在为null的时候返回一个指定的值

double? num1 = null;
double? num2 = 3.14157;
double num3;
num3 = num1 ?? 5.34;


此外,C#还提供了一些特殊的数据类型,如:
- `object`:所有类型的基类。
- `dynamic`:表示动态类型,可以在运行时进行类型检查和绑定。
- `var`:隐式类型,由编译器根据赋值语句自动推断类型。


占位符

 int n1 = 10;
  int n2 = 20;
  int n3 = 30;
  Console.WriteLine("第一个数字是{0},第二个数字是{2},第三个数字是{1}", n1, n2, n3);
  Console.ReadKey();

 

6.占位符

1.c# 占位符
1.占位符的使用方法:先挖坑,再填坑。
注意点:
2.(1)挖了几个坑,就应该填几个坑,如果多填了,没效果,少填了,报异常。
(2)输出顺序,按照挖坑顺序。
3.代码示例:
(1)这个例子不仅展示了占位符的使用方法,也展示了占位符的输出顺序是按照挖坑顺序来的。  

int n1 = 10;
  int n2 = 20;
  int n3 = 30;
  Console.WriteLine("第一个数字是{0},第二个数字是{2},第三个数字是{1}", n1, n2, n3);
  Console.ReadKey();

​7.常用转义字符

(1)转义字符指的就是一个'\'+一个特殊的字符,组成了一个具有特殊意义的字符。
(2)常用的转义字符
\n:表示换行
\":表示一个英文半角的双引号
\t:表示一个tab键的空格
\b:表示一个退格键(相当于删除键),放到字符串的两边没有效果
\r\n:windows操作系统不认识\n,只认识\r\n,相当于换行
\\:表示一个\
@符号:
(1):取消\在字符串中的转义作用,就是不转义
(2):将字符串按照原格式输出。


Console.WriteLine("您好明天");
Console.WriteLine("您好\n明天");
Console.WriteLine("你想说什么\"\"");
Console.WriteLine("Hello\tWorld");
Console.WriteLine("别做\b梦了");
Console.WriteLine("\b别做梦了");
Console.WriteLine("别做梦了\b");
string str = "阳光明媚\n风和日丽";           System.IO.File.WriteAllText(@"C:\Users\86178\Desktop\1019.txt", str);
string path = "C:\\Users\\86178\\Desktop\\1019.txt";
string path1 = @"C:\Users\86178\Desktop\1019.txt";
Console.WriteLine(path);
Console.WriteLine(path1);
Console.WriteLine(@"阳光明媚
                风和日丽");
Console.ReadKey();
 

8.类型转换

1.显式类型转换(强制类型转换):
int intValue = 10;
double doubleValue = (double)intValue;
 
2.隐式类型转换:
int intValue = 10;
double doubleValue = intValue;
 
3.使用Convert类进行类型转换:
int intValue = 10;
string stringValue = Convert.ToString(intValue);

//将 String 表达式转换成 double 类型
String sVaule;
double dVale;
dVale= Convert.ToDouble(sVaule);

//将 String 表达式转换成 bool 类型
String MyString = " true ";
bool MyBool = Convert.ToBoolean( MyString );


 
4.使用Parse方法进行字符串转换:
string stringValue = "10";
int intValue = int.Parse(stringValue);
 
5.使用TryParse方法进行安全的字符串转换:
string stringValue = "10";
int intValue;
bool success = int.TryParse(stringValue, out intValue);
if (success)
{
    // 转换成功
}
else
{
    // 转换失败
}
 
 
6.使用ToString方法将基本类型转换为字符串:
int intValue = 10;
string stringValue = intValue.ToString();
 

9.运算符

11

10.逻辑结构

-------------------if/else--------------------------


if(布尔表达式)
{
语句块 1;
}else{
语句块 2;
}




int num = 10;

if (num > 0)
{
    Console.WriteLine("Number is positive");
}
else
{
    Console.WriteLine("Number is non-positive");
}

---------------------------
if(布尔表达式 1)
{
语句块 1;
}else if(布尔表达式 2){
语句块 2;
}
…
else{
语句块 n;
}

----------------swich/case--------------


int day = 3;

switch (day)
{
    case 1:
        Console.WriteLine("Monday");
        break;
    case 2:
        Console.WriteLine("Tuesday");
        break;
    case 3:
        Console.WriteLine("Wednesday");
        break;
    case 4:
        Console.WriteLine("Thursday");
        break;
    case 5:
        Console.WriteLine("Friday");
        break;
    default:
        Console.WriteLine("Weekend");
        break;
}
---------------while循环---------
int i = 0;

while (i < 5)
{
    Console.WriteLine(i);
    i++;
}

--------do/while-------------------
int i = 0;

do
{
    Console.WriteLine(i);
    i++;
} while (i < 5);

------------for循环---------------
 for (int i1 = 1; i1 <= 9; i1++)
 {
               
            }

11.异常捕获

结构组成

try
{
 <可能出现异常的代码>
}
catch
{
 <出现异常后执行的代码>
}
finally
{
 <不管有没有异常都要执行的代码(可选)>
}

------------------------------
using System;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string s = Console.ReadLine();
            try
            {
                int n = int.Parse(s);
                Console.WriteLine(n);
            }
            catch
            {
                Console.WriteLine("输入的不是一个整数");
            }
        }
    }
}

12.三元表达式

Console.WriteLine("请输入第一个数字:");
int n1 = int.Parse(Console.ReadLine());
Console.WriteLine("请输入第二个数字:");
int n2 = int.Parse(Console.ReadLine());

int n3 = n1 > n2 ? n1 : n2;

Console.WriteLine(n3);
Console.ReadKey();
 

13.常量

所谓常量,就是在程序的运行过程中其值不能被改变的量。常量的类型也可以是任何一种C#的数据类型。常量的定义格式为:
  const 常量数据类型 常量名(标识符)=常量值;


    const double PI=3.1415926;
  const string VERSION=“Visual Studio 2010”;

14.枚举


//枚举声明,如果不声明值,会默认从0 1 2 3开始排列
 public enum MyColors
    {
        Yellow = 1,
        Green = 2,
        Red = 4,
        Blue = 8
    }

//枚举引用
  MyColors  ss=        MyColors.Yellow;
  Console.WriteLine(ss);
--------------
MyColors ss =        MyColors.Yellow;
//强制类型转换,获取数值
 int sd = (int)ss;
 Console.WriteLine(sd);

15.结构

//struct 语句为程序定义了一个带有多个成员的新的数据类型。例如,您可以按照如下的方式声明 Book 结构:
//可以帮助我们一次性声明多个不同类型的变量
//变量在程序运行期间只能存储一个值,而字段可以存储多个值。



struct Books
{
   public string _title;//字段,不是变量,加下划线
   public string _author;
   public string _subject;
   public int _book_id;
};  



 Books b;
 b._title = "1";
 b._author = "2";

 Books A;
 A._title = "1";
 A._author = "2";

 16.数组

//1.数组是一个引用类型,所以需要使用 new 关键字来创建数组的实例
double[] balance = new double[10];
string[] sarray = { "Hello", "From", "Tutorials", "Point" };
//2.数组赋值

//2.1索引赋值
double[] balance = new double[10];
balance[0] = 4500.0;

//2.2声明时赋值
double[] balance = { 2340.0, 4523.69, 3421.0};
//2.3也可以省略数组的大小
int [] marks = new int[] { 99, 98, 92, 97, 95};

3.访问数组元素
3.1通过索引访问
double salary = balance[9];
3.2遍历数组for循环 
           int[] n = new int[10];//声明一个大小是10的数组
            //初始化数组
            for(int i=0;i<10;i++)
            {
                n[i] = i + 100;
            }
3.3遍历数组,foreach
          foreach(int j in n)
            {
                int i = j - 100;
                Console.WriteLine("n[{0}]={1}", i, j);
            }
 

 

17.方法/函数

[public] [static] 返回值类型 方法名字([参数列表])
{
	方法体
}


-------------------------------
public static int MaxArr(int[] a)
{
    int temp = Int32.MinValue;
    for (var i = 0; i < a.Length; i++)
    {
        if (a[i]>temp)
        {
            temp = a[i];
        }      
    }
    return temp;
}

//方法调用,在main函数中调用
int result = MaxArr(new int[]{20,0,-10,30,25,-100});
Console.WriteLine("数组中最大值为:"+result);
//不自动关闭控制台,等待输入
Console.ReadLine();

18.高级参数out、ref、params

1//return返回一个值,out可以返回多个值

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

namespace ChuangzhiConsel
{

    class Program
    {
        static void Main(string[] args)
        {
            int[] n = new int[11];
            int re_max;
            int re_min;
            double re_sum;
            double re_avg;
            Random r = new Random();
            for (int i = 0; i < n.Length; i++)
            {
                n[i] = r.Next(0, 12);
                Console.Write("{0}  ", n[i]);
            }
            Test(n, out re_max, out re_min, out re_sum, out re_avg);
            //真正将re_avg保留两位
            Console.WriteLine("\n返回的最大值:{0},最小值:{1},总和:{2},均值:{3:0.000}", re_max, re_min, re_sum, re_avg);
            re_avg = Convert.ToDouble(re_avg.ToString("0.00"));
            Console.WriteLine("真正re_avg保留两位:{0}", re_avg);
            Console.ReadKey();
        }

        /// <summary>
        /// 计算最大、最小、总和、均值
        /// </summary>
        /// <param name="nums"></param>
        /// <param name="max"></param>
        /// <param name="min"></param>
        /// <param name="sum"></param>
        /// <param name="avg"></param>
        public static void Test(int[] nums, out int max, out int min, out double sum, out double avg)
        {
            max = int.MinValue;
            min = int.MaxValue;
            sum = 0;
            avg = 0;
            for (int i = 0; i < nums.Length; i++)
            {
                if (nums[i] > max)
                {
                    max = nums[i];
                }
                if (nums[i] < min)
                {
                    min = nums[i];
                }
                sum += nums[i];
                avg = sum / nums.Length;
            }
        }
    }
}
//ref将实参代入方法中进行修改,返回修改后了的值,不需要return一个定义的形参;

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

namespace ChuangzhiConsel
{

    class Program
    {
        static void Main(string[] args)
        {
            double salary;
            Console.WriteLine("请输入当前薪水:");
            salary  = Convert.ToDouble(Console.ReadLine());
            TestRef(ref salary);//没有声明类型接收
            Console.WriteLine("加薪后:{0}", salary);
            Console.ReadKey();
        }

        public static void TestRef(ref double s)//没有返回类型
        {
            s += 500;
        }
    }
}
-------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ChuangzhiConsel
{

    class Program
    {
        static void Main(string[] args)
        {
            int num1 = 10;
            int num2 = 20;
            TestRef(ref num1, ref num2);
            Console.WriteLine("交换后:num1={0}  num2={1}",num1,num2);
            Console.ReadKey();
        }

        /// <summary>
        /// 用于不另外开辟变量的情况下,交换两个变量值
        /// </summary>
        /// <param name="n1">第一个变量</param>
        /// <param name="n2">第二个变量</param>
        public static void TestRef(ref int n1,ref int n2)//没有返回类型
        {
            n1 = n1 - n2;
            n2 = n1 + n2;
            n1 = n2 - n1;
        }
    }
}
//params可变参数,且参数为最后的定义,用于减少声明的参数 


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

namespace ChuangzhiConsel
{

    class Program
    {
        static void Main(string[] args)
        {
            //int[] array = { 1, 2, 3, 4, 5 };
             //替换12345这个数组
            Tets("张三", 1, 2, 3, 4, 5);
            Console.ReadKey();
        }

        public static void Tets(string name, params int[] grade)
        {
            int sum = 0;
            for (int i = 0; i < grade.Length; i++)
            {
                sum += grade[i];
            }
            Console.WriteLine("{0}的总成绩是:{1}", name, sum);
        }

    }
}

19.方法重载

问:什么是方法的重载?

答:方法的名称相同,但是参数不同。参数不同,分为2种情况:

情况一:如果参数的个数相同,那么参数的类型就不能相同。

​情况二:如果参数的类型相同,那么参数的个数就不能相同。



public static void M(int n1, int n2)
{
    int result = n1 + n2;
}
public static double M(double d1, double d2)
{
    return d1 + d2;
}
public static void M(int n1, int n2,int n3)
{
    int result = n1 + n2 + n3;
}
public static string M(string s1, string s2)
{
    return s1 + s2;
}

20.类


//1.写一个类

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

namespace _01_MY_First_Demo
{
    public class Person
    {

        public string _name;
        public int _age;
        public char _gender;

     


        public   void CHLSS()
        {
            Console.WriteLine("吃喝拉撒睡");
        }


    }
}

//2.new一个对象进行调用

 Person sa = new Person();
            sa._name = "sss";
            sa._age = 6;
            sa.CHLSS();

21.属性

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

namespace _01_MY_First_Demo
{
    public class Person
    {

        private string _name;
        private int _age;
        public char _gender;

        public string Name { get => _name; set => _name = value; }
        public int Age { get => _age; set => _age = value; }

        public   void CHLSS()
        {
            Console.WriteLine("吃喝拉撒睡"+ Name+"年龄"+ Age);
        }


    }
}
---------------------------------------------------

//创建对象
  Person sa = new Person();
            sa.Name = "sss";
            sa.Age = 6;
            sa.CHLSS();

22.静态和非静态的区别

//静态方法
public static void Max(){ }
//非静态方法
public void Max(){ }

//静态类
public static class program{ }
//非静态类
public class program{ }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端开发怎么解决性能优化的问题? - 易智编译EaseEditing

前端性能优化是确保网站或应用在加载速度、响应性和用户体验等方面达到最佳状态的关键任务。以下是一些解决前端性能优化问题的方法&#xff1a; 压缩和合并代码&#xff1a; 压缩和合并CSS、JavaScript和HTML文件可以减少文件大小&#xff0c;加快加载速度。使用压缩工具&am…

分布式核心知识以及常见微服务框架

分布式中的远程调用 在微服务架构中&#xff0c;通常存在多个服务之间的远程调用的需求。远程调用通常包含两个部分&#xff1a;序列化和通信协议。常见的序列化协议包括json、xml、 hession、 protobuf、thrift、text、 bytes等&#xff0c;目前主流的远程调用技术有基于HTTP…

C语言编写图形界面

文章目录 环境使用库基础概念句柄 程序的入口创建窗口定义窗口类注册窗口类创建窗口 完整代码运行效果 环境 使用的是VSCode MinGW&#xff1b; 使用库 我们使用windows.h库来实现图形化界面。 头文件如下&#xff1a; #include <windows.h>windows.h是 Windows 操作…

特斯拉Model 3的七年狂飙

‍ 作者 | 张祥威 编辑 | 德新 发布一周拿下32万张订单&#xff0c;之后用时五年&#xff0c;交付量突破100万辆。粗略计算&#xff0c;自2016年发布至今&#xff0c;特斯拉Model 3已交付超150万辆。 放眼新能源赛道&#xff0c;如此战绩 别无二家。 Model 3踩中纯电动车的…

8.19论文阅读

文章目录 Graph-Segmenter: Graph Transformer with Boundary-aware Attention for Semantic Segmentation方法 SCSC: Spatial Cross-scale Convolution Module to Strengthen both CNNs and Transformers方法 Deformable Mixer Transformer with Gating for Multi-Task Learni…

Kubernetes 使用 Rancher 管理

K8S集群管理工具 只能管理单个K8S集群 kubectl命令行管理工具 dashboard&#xff08;K8S官方的UI界面图形化管理工具&#xff09; &#xff08;管理多集群很麻烦&#xff0c;切换不同集群每次需要更改kube-config文件[kubectl配置文件]&#xff0c;如果kubeadm部署每次都需…

Java动态代理、反射

文章目录 动态代理调用者--->代理--->对象为什么需要代理代理的详细实现过程代码详情 反射反射概念反射中常用的方法所有代码 动态代理 调用者—>代理—>对象 动态代理就是无侵入式的给代码增加新的功能&#xff0c;通过接口保证后面的对象和代理需要实现同一个接…

常用的电参数

电参数根据电流的特点可以分为直流电参数和交流电参数&#xff0c;在电参数中有些是可以通过电参数表测得&#xff0c;有些参数则为通过测得的参数计算而来。 一、电参数 1.1 直接可测电参数 ——瞬时电压值 ——瞬时电流值 n——采样点数 f——频率 time——时间 其中&…

探究Java spring中jdk代理和cglib代理!

面对新鲜事物&#xff0c;我们要先了解在去探索事物的本质-默 目录 一.介绍二者代理模式 1.1.Jdk代理模式 1.2cglib代理模式 1.3二者区别 1.3.1有无接口 1.3.2灵活性 1.4对于两种代理模式的总结 1.4.1jdk代理模式 1.4.2cglib代理模式 二.两种代理模式应用场景 2.1jd…

使用R语言绘制折线图

写在前面 昨天我们分享了使用Python绘制折线图的教程,跟着NC学作图 | 使用python绘制折线图,考虑到很多同学基本不使用Python绘图。那么,我们也使用R语言复现此图形。 此外,在前期的教程中,我们基本没有分享过折线图的教程。因此,我们在这里也制作一期关于折线图的教程。…

Qt 编译使用Bit7z库接口调用7z.dll、7-Zip.dll解压压缩常用Zip、ISO9660、Wim、Esd、7z等格式文件(一)

bit7z一个c静态库&#xff0c;为7-zip共享库提供了一个干净简单的接口 使用CMAKE重新编译github上的bit7z库&#xff0c;用来解压/预览iso9660&#xff0c;WIm&#xff0c;Zip,Rar等常用的压缩文件格式。z-zip库支持大多数压缩文件格式 导读 编译bit7z(C版本)使用mscv 2017编译…

系统架构设计师之缓存技术:Redis持久化的两种方式-RDB和AOF

系统架构设计师之缓存技术&#xff1a;Redis持久化的两种方式-RDB和AOF

无人机空管电台-中大型无人机远程VHF语音电台系统

方案背景 中大型无人机在执行飞行任务时&#xff0c;特别是在管制空域飞行时地面航管人员需要通过语音与无人机通信。按《无人驾驶航空器飞行管理暂行条例》规定&#xff0c;中大型无人机应当进行适航管理。物流无人机和载人eVTOL都将进行适航管理&#xff0c;所以无人机也要有…

Spring Cloud Alibaba笔记

&#x1f600;&#x1f600;&#x1f600;创作不易&#xff0c;各位看官点赞收藏. 文章目录 Spring Cloud Alibaba 笔记1、Nacos 服务注册和配置中心1.1、Nacos 之下载启动1.2、Nacos 之注册中心1.3、Nacos 之服务发现1.4、Nacos 之配置中心1.5、Nacos 之分类配置1.6、Nacos 之…

信号处理--基于EEG脑电信号的眼睛状态的分析

本实验为生物信息学专题设计小项目。项目目的是通过提供的14导联EEG 脑电信号&#xff0c;实现对于人体睁眼和闭眼两个状态的数据分类分析。每个脑电信号的时长大约为117秒。 目录 加载相关的库函数 读取脑电信号数据并查看数据的属性 绘制脑电多通道连接矩阵 绘制两类数据…

sdk manager (ubuntu20.4) 安装

1、首先下载sdk manager 1.9.3 下载链接 https://www.baidu.com/link?urlVXJhUqxxhS3eFK3bOPTzi5LFl6ybeW3JwDY1CwANaPf1gvO3IxQKzY547NIe53x1blJxnAXg7FTRTvs-cnfnVa&wd&eqida22baa7b0004ca980000000664e2d426 当然要登录自己的账号才能成功下载&#xff0c;下载对应…

神经网络基础-神经网络补充概念-54-softmax回归

概念 Softmax回归&#xff08;Softmax Regression&#xff09;是一种用于多分类任务的机器学习算法&#xff0c;特别是在神经网络中常用于输出层来进行分类。它是Logistic回归在多分类问题上的推广。 原理 Softmax回归的主要思想是将原始的线性分数&#xff08;得分&#xf…

k8s-dashboard使用指导手册

一、访问 dashboard http://172.66.209.101:32001 二、选择 Namespace 如下图&#xff1a; 1 在①搜索框中输入 spms 2 在②选择 spms-cloud 三、查找 pod 1 打开 pod 列表 2 打开过滤窗口 3 搜索 pod 在打开的搜索框中输入 pod的关键字&#xff0c;支持模糊搜索 如搜索…

以创新点亮前路,戴尔科技开辟数实融合新格局

编辑&#xff1a;阿冒 设计&#xff1a;沐由 2023年&#xff0c;对于戴尔科技而言是特殊的一年&#xff0c;这是戴尔科技进入中国市场第25个年头——“巧合”的是&#xff0c;这25年也是中国产业经济发展最快&#xff0c;人们工作与生活发生变化最大的四分之一个世纪。 2023年&…

QT-Mysql数据库图形化接口

QT sql mysqloper.h qsqlrelationaltablemodelview.h /************************************************************************* 接口描述&#xff1a;Mysql数据库图形化接口 拟制&#xff1a; 接口版本&#xff1a;V1.0 时间&#xff1a;20230727 说明&#xff1a;支…