当前位置: 首页 > news >正文

【C#基础】C# 常用语句讲解

序号系列文章
3【C#基础】C# 数据类型总结
4【C#基础】C# 变量和常量的使用
5【C#基础】C# 运算符总结

文章目录

  • 前言
  • 语句概念
  • 1,迭代语句
    • 1.1 for 语句
    • 1.2 foreach 语句
    • 1.3 while 语句
    • 1.4 do 语句
  • 2,选择语句
    • 2.1,if 语句
    • 2.2,else 语句
    • 2.3,switch 语句
  • 3,跳转语句
    • 3.1 break 语句
    • 3.2 continue 语句
    • 3.3 goto 语句
    • 3.4 return 语句
  • 结语

前言

😊大家好,我是writer桑,前面一章已经学习了 C# 中运算符的使用,那本章就开始学习 C# 程序中的常用语句吧,希望看完大家能够有所收获,感谢支持!


语句概念

程序的执行操作使用语句表示,常见的语句操作包括声明迭代、判断语句、调用方法,以及根据给定条件分支到一个或另一个代码块等。语句在程序中的执行顺序称为 “控制流” 或 “执行流”, 也即程序根据语句执行着不同的操作。

1,迭代语句

迭代语句表示反复执行的语句或语句块,直到满足某些条件为止,其中包括 for 语句、foreach 语句、do 语句和 while 语句 。使用迭代语句实现重复控制结构时,在迭代语句中的任何地方,都可以使用 break 语句跳出当前所在循环,或者使用 continue 语句进行循环的下一个迭代。

1.1 for 语句

for 语句内指定的条件判断为 true 时,for 语句会执行一次循环体的内容,直到条件判断为 false 时会结束循环。实现一个小于5的计数器例子,借此来讨论 for 语句的语法。

示例如下:

for (int i = 0; i < 5;i++)     // 初始化表达式;条件判断;迭代部分
{Console.WriteLine(i);       // 循环体的声明 
} 

上述示例展示了 for 语句的构成部分:

  • “初始化表达式” 部分仅在进入循环前执行一次。通常在该部分中声明并初始化局部循环变量,但不能从 for 语句外部访问声明的变量。

上例中的"初始化表达式"部分声明并初始化了 int 类型的变量 i :

int i = 0;
  • “条件判断” 部分是用来确定是否应执行循环中的下一个迭代。如果判断结果为 true 或为 null, 则执行下一个迭代;否则退出循环,同时条件判断部分必须为布尔表达式。

上例中的"条件判断"部分表示判断变量 i 是否小于 5:

i < 5;
  • “迭代部分” 是在循环体每次执行完后再执行的操作。

上例中的"迭代部分"使用增量运算符表示每次执行完 i 变量加1:

i++
  • "循环体"部分表示 for 语句每次循环需要执行的内容,同时"循环体"部分必须是一个语句或代码块。

上例中的"循环体"部分在每次循环中输出变量 i:

Console.WriteLine(i);

for 语句流程图:
在这里插入图片描述

注意,for 语句的所有部分都是可选的, 可以在 for 语句的外部声明上述的三个部分,如果缺少部分声明可能会造成无限 for 循环。

示例如下:

// 报错,省略初始化部分 
for(; i < 5; i++)
{Console.WriteLine(i);
}
// 死循环,省略条件判断部分 
for (int j = 1; ; j++)
{Console.WriteLine(j);
}
// 死循环,省略迭代部分 
for (int k = 1; k < 5;)
{Console.WriteLine(k);
}
// 三个部分都省略
for (; ; )
{// 死循环...
}

1.2 foreach 语句

foreach 语句用于列举出迭代对象中所有的元素,foreach 语句中的表达式由关键字 in 隔开的两个项组成。in 右边的项是可迭代对象,in 左边的项是只读变量,用来存放该集合中的每个元素。 借一个简单的示例讨论 foreach 语句的语法。

示例如下:

// 可迭代对象 fibNumbers 
var fibNumbers = new List<int> { 0, 1, 1, 2, 3, 5, 8, 13 };foreach (int element in fibNumbers)     // 只读变量 element 
{Console.Write($"{element} ");		// 循环体 
} // 输出: 
// 0 1 1 2 3 5 8 13 

上述示例展示了 foreach 语句的构成部分:

  • “可迭代对象” 也即可以被 foreach 语句迭代的对象,当一个对象实现了 GetEnumerator 方法且具有公共 Current 属性和公共无参数 MoveNext 方法时,这个对象就可以被 foreach 语句迭代。

上例中的"可迭代对象"声明了一个 List 类型的元素 fibNumbers,并存放了一些数字元素:

var fibNumbers = new List<int> { 0, 1, 1, 2, 3, 5, 8, 13 };
  • "只读变量"在循环中接收迭代对象中的元素,可迭代对象中的每个元素都会依次赋值给只读变量。可以在循环体中对只读变量进行操作。

上例中的"迭代元素"声明了一个 int 类型的元素 element :

int element in fibNumbers
  • "循环体"部分表示 foreach 语句每次循环需要执行的内容,同时"循环体"部分必须是一个语句或代码块。

上例中的"循环体"部分在每次循环中输出变量 element:

Console.Write($"{element} ");		// 循环体 

foreach 语句流程图:
在这里插入图片描述


1.3 while 语句

while 语句表示当指定的布尔表达式的计算结果为 true 时,while 语句就会执行一条语句或一个语句块。 由于在每次执行循环之前都会计算布尔表达式, 所以 while 循环会执行零次或多次。借一个简单的例子讨论 while 语句的语法。

示例如下:

int n = 0;while (n < 5)
{Console.WriteLine(n);   // 循环体 n++;
}// 输出: 
// 01234

上述示例展示了 while 语句的构成部分:

  • "布尔表达式"部分表示 while 语句每次循环执行之前需要计算的结果,若结果为 true 则执行循环体,反之则退出循环。

上例中的"布尔表达式"声明了 int 类型 n 并判断是否小于5:

while (n < 5)
  • "循环体"部分表示 while 语句每次循环需要执行的大括号里的内容,同时"循环体"部分必须是一个语句或代码块。

上例中的"循环体"部分在每次循环中输出整数变量 n,并令 n 自增:

Console.WriteLine(n);   // 循环体 
n++;

while 语句流程图:
在这里插入图片描述


1.4 do 语句

do 语句会先执行一次循环体中的语句;再判断while语句中布尔表达式是否为真, 如果条件判断为真则继续循环,反之则终止循环。 由于在每次执行循环之后都会计算布尔表达式,所以 do 循环会执行一次或多次,注意不同于 while 循环是执行零次或多次。 借一个简单的例子讨论 do 语句的语法。

示 例:

int n = 0;		// 声明整数 ndo
{Console.Write(n);	// 循环体 n++;
} while (n < 5);		// while 条件判断式 // 输出: 
// 01234 

上述示例展示了 do 语句的构成部分:

  • "循环体"部分跟 while 语句一样, 表示每次判断为 true 时需要执行的行为,同时"循环体"部分必须是一个语句或代码块。

上例中的"循环体"部分在每次循环中输出整数变量 n,并令 n 自增:

Console.Write(n);	// 循环体 
n++;
  • do 语句的"布尔表达式"部分与 while 语句没有区别。表示 while 语句每次循环执行之前需要计算的结果,若结果为 true 则执行循环体,反之则结束循环。

上例中的"布尔表达式"声明了 int 类型 n 并判断是否小于5:

while (n < 5);

do 语句流程图:
在这里插入图片描述

2,选择语句

选择语句是根据表达式的值从许多可能的路径中选择要执行的语句,其中包括 if 、else 和 switch 语句。 if 语句可与 else 结合使用,基于布尔表达式选择不同的路径。语句 switch 根据与表达式的模式匹配要执行的语句列表。

2.1,if 语句

if 语句由一个布尔表达式和一个或多个语句组成。 if 语句仅在布尔表达式计算结果为 true 时执行指定的语句部分,计算结果为 false 时则语句结束。借一个示例来讨论 if 语句的语法。

示例如下:

int value = 100; if (value < 0 || value > 100)
{Console.Write($"{value}小于0或者大于100");
}

if 语句的构成部分:

  • "布尔表达式"计算结果为 true 则执行指定的语句,计算结果为 false 则什么都不执行。

上例中的布尔表达式声明 int 类型变量 value 是否小于0或大于 100:

(value < 0 || value > 100)
  • if 语句的执行部分由一个或多个语句构成,仅在布尔表达式计算结果为 true 时执行。

上例中的语句执行部分将输出 value 变量:

Console.Write($"{value}小于0或者大于100");

if 语句的流程图:
在这里插入图片描述

2.2,else 语句

else 语句与 if 语句搭配,else 语句在 if 语句的布尔表达式计算结果为 false 时执行。 借一个示例来讨论 else 语句的语法。

示例如下:

int number = 20;if (number < 20)        // 结果为 true 时执行 
{Console.WriteLine("number小于20");
}
else                   // 结果为 false 时执行  
{Console.WriteLine("number大于等于20");
} 

else 语句的构成部分:

  • 当 if 语句的布尔表达式为 false 时执行 else 中的一个或多个语句的执行部分。

上例中的 else 语句的执行部分输出 number 变量大于等于20的提示信息:

Console.WriteLine("number大于等于20");

if…else 语句的流程图:
在这里插入图片描述

2.3,switch 语句

switch 语句根据给定的表达式参数与 case 关键字声明的匹配表达式匹配时,对应的匹配模式会执行指定的一个或多个语句部分。以一个示例来说明 switch 语句的语法。

示例如下:

double measurement = 1.1;		// 声明测量值switch (measurement)	// switch(表达式参数)
{// case 匹配表达式 case < 0.0:Console.WriteLine($"测量值为{measurement},太低了");break;case > 15.0:Console.WriteLine($"测量值为{measurement},太高了");break;case double.NaN:Console.WriteLine("失败的测量值。");break;default:		// 默认部分Console.WriteLine($"测量值为{measurement}.");break; 
}

switch 语句的构成部分:

  • 参数表达式部分必须是一个整型或枚举类型,又或者是可以转换为整型或枚举类型的 class 类型。 参数用于与 switch 语句内的 case 语句匹配。

上例的参数表达式部分声明了一个 double 类型的变量 measurement:

double measurement = 1.1;		// 声明测量值switch (measurement)	// switch(表达式参数)
  • 匹配表达式部分表示一个匹配的条件,使用 case 关键字声明。switch 语句可以有多个 case 语句,当匹配表达式布尔值为 true 时则执行对应的语句部分,若布尔值为 false 时则直接执行执行下一个匹配部分直到 switch 语句结束。

上例的匹配表达式部分声明了三个 case 语句:

// case 匹配表达式 
case < 0.0://...
case > 15.0://...
case double.NaN://...
  • "执行语句"部分即匹配结果为 true 时执行的语句,注意 C# 不支持从一个 case 标签显式贯穿到另一个 case 标签, 所以在 case 执行语句不为空的情况下需要声明 break 或其它跳转语句。

上例中的执行语句部分输出了 measurement 变量的提示信息和 break 语句 :

case < 0.0:Console.WriteLine($"测量值为{measurement},太低了");break;
case > 15.0:Console.WriteLine($"测量值为{measurement},太高了");break;
case double.NaN:Console.WriteLine("失败的测量值。");break;
  • default 语句是在 switch 语句末尾声明的一个可选的语句,表示在上面所有的 case 匹配结果都不为 true 时执行的语句。 当 switch 语句中的 case 匹配结果都不为 true 且没有 default 语句的时候会直接结束 switch语句。

上例中的 default 语句的执行部分输出 measurement 变量的提示信息和 break 语句:

Console.WriteLine($"测量值为{measurement}."); 
break; 

switch 语句的流程图:
在这里插入图片描述

3,跳转语句

跳转语句表示可以中断当前程序流,并从一个程序点跳转到另外一个程序点继续执行程序。C# 支持的跳转语句包括 break 语句、continue 语句、return 语句和 goto 语句。 借一个简单的示例来讨论这些跳转语句的使用。

3.1 break 语句

break 语句表示将终止当前所在的迭代语句。包括上面所讲到的 for、foreach、while 或 do 语句以及 switch 语句。break 语句可以直接停止迭代语句的执行,并把执行权给后面的程序或直接结束。 以一个示例来演示 break 语句的语法。

示例如下:

int[] numbers = { 1, 2, 3, 4, 5, 6 }; foreach(int number in numbers)
{if(number == 3){break;		// 跳出当前 foreach 语句}Console.WriteLine($"{number}");
}
// 输出: 
// 1 
// 2

break 语句的流程图:
在这里插入图片描述

3.2 continue 语句

continue 语句与 break 语句不同的 continue 语句只跳过当前循环直接进入下一次循环,而 break 语句是跳出整个循环。 continue 语句常用于 while 循环和 for 循环中。 以一个示例来演示 continue 语句的语法。

示例如下:

for (int i = 0; i < 5; i++)
{Console.Write($"Iteration {i}: ");if (i < 3){Console.WriteLine("skip");continue;}Console.WriteLine("done");
}// 输出: 
// Iteration 0: skip
// Iteration 1: skip
// Iteration 2: skip
// Iteration 3: done
// Iteration 4: done

continue 语句的流程图:
在这里插入图片描述

3.3 goto 语句

goto 语句将控制权转交给带有标签的语句,实现程序从一个点跳转到另外一个程序点执行。 以一个示例来理解 goto 语句。

示例如下:

// 局部变量定义 
int a = 10;LOOP: do
{if (a == 15){// 直接跳过迭代a++;goto LOOP;}Console.WriteLine($"a 的值:{a}");a++; } while (a < 20);// 输出: 
/*a 的值:10a 的值:11a 的值:12a 的值:13a 的值:14a 的值:16a 的值:17a 的值:18a 的值:19 
*/

注意无论什么编程语言,都不建议使用 goto 语句。因为 goto 语句使得程序的控制流难以跟踪,使程序难以理解和难以修改。而且任何使用 goto 语句的程序可以改写成不需要使用 goto 语句的写法。(示例中的功能可以使用 continue 语句实现)

goto 语句的流程图:

3.4 return 语句

return 语句的执行也表示函数的结束,并将控制权和函数结果(若有)返回给函数的调用方,在 C# 中 return 语句的返回值的类型必须和函数的返回类型相同 。return 语句是函数的一个可选项,函数中不是一定要有 return 语句。如果函数成员不计算值,则使用不带表达式的 return 语句。 以一个示例来理解 return 语句。

示例如下:

Console.WriteLine("First call:");
DisplayIfNecessary(6);Console.WriteLine("Second call:");
DisplayIfNecessary(5);void DisplayIfNecessary(int number)
{if (number % 2 == 0){return;}Console.WriteLine(number);
}
// 输出: 
//First call:
//Second call:
//5 

结语

😀以上就是 C# 常用语句的介绍,希望能够对大家有所帮助。望大家多多支持,你们的支持就是笔者创作最大的动力!

相关文章:

【C#基础】C# 常用语句讲解

序号系列文章3【C#基础】C# 数据类型总结4【C#基础】C# 变量和常量的使用5【C#基础】C# 运算符总结文章目录前言语句概念1&#xff0c;迭代语句1.1 for 语句1.2 foreach 语句1.3 while 语句1.4 do 语句2&#xff0c;选择语句2.1&#xff0c;if 语句2.2&#xff0c;else 语句2.3…...

腾讯云——负载均衡CLB

负载均衡 CLB 提供四层&#xff08;TCP 协议/UDP 协议/TCP SSL 协议&#xff09;和七层&#xff08;HTTP 协议/HTTPS 协议&#xff09;负载均衡。您可以通过 CLB 将业务流量分发到多个后端服务器上&#xff0c;消除单点故障并保障业务可用性。CLB 自身采用集群部署&#xff0c;…...

6.关于系统服务的思考—— native vs java

文章目录native服务 以sensor service为例Native 服务java 服务&#xff0c; 以vibrate为例java 服务 以一个demo为例native服务 以sensor service为例 service启动 SystemServer.startBootstrapServices---->>>mSystemServiceManager.startService—>>>Sen…...

SQL语句创建视图:

前言 &#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏: &#x1f354;&#x1f35f;&#x1f32f; c语言初阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f349;本篇简介:>:介绍数据库中有关视图的知识,参考学校作业. 金句分享:…...

使用BP神经网络和Elman Net预测航班价格(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密…...

JavaWeb9-volatile解决内存可见性和指令重排序问题

目录 1.解决内存可见性问题 2.解决指令重排序问题 3.volatile缺点 4.特使使用场景 volatile&#xff08;易变的&#xff0c;易挥发的&#xff0c;不稳定的&#xff09;可以解决内存可见性和指令重排序的问题。 1.解决内存可见性问题 代码在写入 volatile 修饰的变量时&am…...

Docker - 镜像操作命令

镜像名称一般分为两部分组成:[repository]:[tag]在没有指定tag时&#xff0c;默认是latest&#xff0c;代表最新版本的镜像1.下载docker镜像 docker pull repository:tag2.查看本地所有镜像 docker images3.创建镜像别名 docker tag repository:tag repository111:tag4.查看镜像…...

全栈之路-前端篇 | 第三讲.基础前置知识【前端标准与研发工具】学习笔记

欢迎关注「全栈工程师修炼指南」公众号 点击 &#x1f447; 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习&#xff01; 涉及 企业运维、网络安全、应用开发、物联网、人工智能、大数据 学习知识 “ 花开堪折直须折&#xff0c;莫待无花…...

Tomcat 线上调优记录

原始Tomcat配置 启动参数Plaintext-Xms256m -Xmx512m -XX:MaxPermSize128m Tomcat 参数配置XML<Executor name"tomcatThreadPool" namePrefix"catalina-exec-" maxThreads"1500" minSpareThreads"50" maxIdleTime"600000&q…...

学习 Python 之 Pygame 开发坦克大战(四)

学习 Python 之 Pygame 开发坦克大战&#xff08;四&#xff09;坦克大战添加音效1. 初始化音效2. 加入游戏开始音效和坦克移动音效3. 添加坦克开火音效4. 添加装甲削减音效5. 添加坦克爆炸音效6. 添加子弹击中边界音效坦克大战添加音效 我的素材放到了百度网盘里&#xff0c;…...

New和Malloc的使用及其差异

1&#xff0c;new的使用关于new的定义&#xff1a;new其实就是告诉计算机开辟一段新的空间&#xff0c;但是和一般的声明不同的是&#xff0c;new开辟的空间在堆上&#xff0c;而一般声明的变量存放在栈上。通常来说&#xff0c;当在局部函数中new出一段新的空间&#xff0c;该…...

2023年细胞生物学复习汇总

细胞分化 1.什么是细胞分化&#xff1f;细胞分化的特点是什么&#xff1f; 答&#xff1a;&#xff08;1&#xff09;细胞分化&#xff08;cell differentiation&#xff09;是指同一来源的细胞逐渐产生出形态结构、功能特征各不相同的细胞类群的过程&#xff0c;其结果是在空间…...

光伏VSG-基于虚拟同步发电机的光伏并网逆变器系统MATLAB仿真

采用MATLAB2021b仿真&#xff01;&#xff01;&#xff01;仿真模型1光伏电池模块&#xff08;采用MATLAB自带光伏模块&#xff09;、MPPT控制模块、升压模块、VSG控制模块、电流滞环控制模块。2s时改变光照强度 &#xff01;&#xff01;&#xff01;VSG输出有功功率、无功功率…...

高可用 - 02 Keepalived_VRRP工作原理

文章目录Keepalived VS HeartbeatKeepalived的用途VRRP与工作原理物理路由器和虚拟路由器Keepalived VS Heartbeat Keepalived是Linux下一个轻量级的高可用解决方案&#xff0c;它与Heartbeat、RoseHA实现的功能类似&#xff0c;都可以实现服务或者网络的高可用&#xff0c;但…...

vue实现xml在线编辑功能

先看效果 避免误会 这是一个在线编辑器 我们可以在这上面随意的编写xml代码格式 我们修改上面的内容之后 就可以在控制台输出内容 如果这正是您想要的东西 那就可以先创建一个vue项目 我们先引入依赖 npm install brace -S npm install element-ui -S npm install vue-cli…...

GitHub Workflow

GitHub Workflow 基本流程 把远程仓库克隆到本地 git clone xxxx.git在本地切换至新的分支 git checkout -b new_branch修改本地仓库的文件 项目修改完成后&#xff0c;查看修改的内容 git diff上传修改之后的内容到本地暂存区 git add modified_files将本地暂存区的代码更新…...

vue学习

vue 其实你只要安装一个vue-cli 就可以了 vue-cli 你可以用比较高的版本 这 当然是 可以滴...

Windows使用ssh协议远程连接ubuntu linux系统

Windows使用ssh协议远程连接ubuntu linux系统一、Windows远程连接ubuntu linux系统二、开启ubuntu ssh服务三、获取ubuntu子系统的ip地址四、从windows上通过ssh连接到ubuntu子系统五、设置ubuntu系统ssh自启动&#xff08;18.04&#xff09;一、Windows远程连接ubuntu linux系…...

大数据处理 - Overview

本文主要介绍大数据处理的一些思路。何谓海量数据处理?所谓海量数据处理&#xff0c;无非就是基于海量数据上的存储、处理、操作。何谓海量&#xff0c;就是数据量太大&#xff0c;所以导致要么是无法在较短时间内迅速解决&#xff0c;要么是数据太大&#xff0c;导致无法一次…...

12-Composer的配置与使用详解

1、自定义类与非类的自动加载与测试 # composer> php 包管理工具 &#xff0c;类似npm1.自己写的类&#xff0c;函数&#xff0c;接口&#xff0c;常量等全局成员&#xff0c;通过自动加载来实现按需加载 2.自己写的代码&#xff0c;有哪些依赖&#xff0c;用到了哪些外部成…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008&#xff1a;是version产品的大版本。 R006&#xff1a;是release产品特性版本。 C009&#xff1a;是通用版 B0014&#xff1a;是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存&#xff1a;1GB 以上 硬盘&#xf…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...