AI教我学编程之C#变量及实例演示

前言

在AI教我学编程之AI自刀 这篇文章中,我们知道了变量的基础类型,那么变量在C#中有什么作用呢?我们一起来看看吧!

目录

  • 重点先知
  • 变量
    • 变量类型
    • 实例演示
  • 变量声明
    • 实例演示
    • 提出疑问
    • 初始化变量
    • 自动初始化
  • 多变量声明
    • 实例演示
  • 使用变量的值
    • 实例演示
  • 静态类型和dynamic 关键字
    • 实例演示
  • 可空类型
    • 实例演示
    • 补充
  • 总结

重点先知

变量是一个名称,表示程序执行时存储在内存中的数据。

变量

变量类型

程序员

C#中有什么样的变量?他们分别有什么作用?列张表

在这里插入图片描述

C#中有局部变量,字段,参数,数据元素这四类变量

在这里插入图片描述

实例演示

程序员

列举代码示例,要求包含以上四种类型的变量,并把它们的位置和作用明确标示出来

在这里插入图片描述

using System;class ExampleClass
{// 字段private int classField = 10; // 类的成员变量,存储对象的状态信息// 方法public void ExampleMethod(int methodParameter){// 局部变量int localVar = 5; // 在方法的作用域保存临时数据// 使用参数和字段int result = localVar + methodParameter + classField;Console.WriteLine($"结果: {result}");}static void Main(){ExampleClass exampleObj = new ExampleClass();// 调用方法并传递参数exampleObj.ExampleMethod(7);// 数组元素int[] myArray = { 1, 2, 3, 4, 5 };Console.WriteLine($"数组元素:{myArray[2]}"); // 存储在数组中的单个数据单元}
}

变量声明

变量在使用之前必须声明。变量声明定义了变量,并完成两件事

  • 1、给变量命名,并为它关联一种类型;
  • 2、让编译器为它分配一块内存。

实例演示

程序员

声明四个不同类型的变量,不赋值,标明他们的类型以及区别

在这里插入图片描述

在代码块中,通过声明并赋值同类型的变量,展示了不同类型的变量在使用时的区别。未赋值的变量在尝试输出时会引发编译错误。

using System;class VariableDeclarationExample
{static void Main(){// 不赋值的变量声明int integerValue;double doubleValue;char charValue;string stringValue;// 在代码块中标明变量的类型和区别{// 整数类型int blockInt = 42;Console.WriteLine($"整数类型变量:{blockInt}");// 双精度浮点数类型double blockDouble = 3.14;Console.WriteLine($"双精度浮点数类型变量:{blockDouble}");// 字符类型char blockChar = 'A';Console.WriteLine($"字符类型变量:{blockChar}");// 字符串类型string blockString = "Hello";Console.WriteLine($"字符串类型变量:{blockString}");}// 尝试输出未赋值的变量将会引发编译错误// Console.WriteLine($"未赋值的整数类型变量:{integerValue}");// Console.WriteLine($"未赋值的双精度浮点数类型变量:{doubleValue}");// Console.WriteLine($"未赋值的字符类型变量:{charValue}");// Console.WriteLine($"未赋值的字符串类型变量:{stringValue}");}
}

提出疑问

程序员

未赋值的变量在尝试输出时会引发什么样的编译错误?

在这里插入图片描述

未赋值的变量在尝试输出时会引发编译错误,具体错误消息可能是类似以下的形式:

Use of unassigned local variable 'variableName'

其中,variableName 是未赋值的变量的名称。这个错误提示表示尝试使用未初始化(未赋值)的局部变量,违反了C#编译器的规则。在使用变量之前,必须为其分配一个值。

是这样吗?让我们运行一下看看!
在这里插入图片描述

初始化变量

声明变量时,可以通过初始化语句将其内存初始化为明确的值。未初始化的局部变量具有未定义的值,无法在赋值之前使用,尝试使用将导致编译错误。

自动初始化

变量在声明时,有些会被自动设为默认值,而有些则不能。未被自动初始化的变量包含未定义的值,必须在赋值前初始化,否则会导致编译错误

实例演示

程序员

列举实例以说明:哪种类型的变量会被自动初始化以及哪种类型的变量不会被初始化?

在这里插入图片描述

using System;class VariableInitializationExample
{static void Main(){// 会被自动初始化为默认值的变量int autoInitializedInt;double autoInitializedDouble;bool autoInitializedBool;string autoInitializedString;// 输出未初始化的变量(自动初始化)的默认值Console.WriteLine($"int 默认值:{autoInitializedInt}");Console.WriteLine($"double 默认值:{autoInitializedDouble}");Console.WriteLine($"bool 默认值:{autoInitializedBool}");Console.WriteLine($"string 默认值:{autoInitializedString}");// 不会被自动初始化的变量int notAutoInitializedInt;double notAutoInitializedDouble;bool notAutoInitializedBool;string notAutoInitializedString;// 尝试输出未初始化的变量将导致编译错误// Console.WriteLine(notAutoInitializedInt);// Console.WriteLine(notAutoInitializedDouble);// Console.WriteLine(notAutoInitializedBool);// Console.WriteLine(notAutoInitializedString);}
}

上述代码中,autoInitializedIntautoInitializedDoubleautoInitializedBoolautoInitializedString 会被自动初始化为默认值(0、0.0、false、null),而 notAutoInitializedIntnotAutoInitializedDoublenotAutoInitializedBoolnotAutoInitializedString 不会被自动初始化,尝试输出它们将导致编译错误。

多变量声明

  • 可以在单个声明语句中声明多个变量。
  • 变量声明中的变量类型必须相同
  • 变量名必须用逗号分隔,可以在变量名后包含初始化语句

实例演示

程序员

列举多变量共同声明的实例,并在一条声明中声明两个不同类型的变量

在这里插入图片描述

using System;class MultipleVariableDeclarationExample
{static void Main(){// 有效的多变量声明语句int x, y, z; // 未初始化的变量double pi = 3.14, radius = 5.0; // 初始化的变量// 尝试在一条语句中声明两个不同类型的变量,将导致编译错误// int a, double b; // 有问题的声明语句// 输出已初始化的变量值Console.WriteLine($"pi 的值:{pi}");Console.WriteLine($"radius 的值:{radius}");}
}

上述代码中,xyz 是未初始化的整数变量,而 piradius 是初始化的双精度浮点数变量。注意最后一条声明语句 int a, double b; 是有问题的,因为它企图在一条语句中声明两个不同类型的变量,将导致编译错误。

使用变量的值

变量名代表该变量保存的值,可以通过使用变量名来使用值。

实例演示

程序员

变量名lk1 表示变量所存储的值。当语句执行的时候,会从内存中获取该值。

在这里插入图片描述

using System;class VariableValueExample
{static void Main(){int lk1 = 42; // 变量名 lk1 表示变量所存储的值// 输出变量的值Console.WriteLine($"lk1 的值:{lk1}");// 修改变量的值lk1 = 100;// 再次输出变量的值Console.WriteLine($"修改后 lk1 的值:{lk1}");}
}

在上述代码中,lk1 是一个整数变量,表示变量所存储的值。通过输出和修改变量的值,展示了变量在执行语句时从内存中获取值的过程。

静态类型和dynamic 关键字

C#中,变量类型是静态的,由编译器在编译时确定。后来,引入了 dynamic 关键字,代表在运行时解析类型。与静态类型不同,dynamic 类型在编译时不进行类型检查,而是在运行时解析。这使得处理像 IronPython、IronRuby 这样的动态语言编写的.NET程序集成为可能。dynamic 类型在编译时不对类型进行检查,而是在运行时解析,因此需要注意类型不一致的风险。

实例演示

程序员

使用 dynamic 关键字声明变量

在这里插入图片描述

using System;class DynamicTypeExample
{static void Main(){// 使用 dynamic 类型dynamic dynamicVar = 10;// 输出 dynamic 变量的类型和值Console.WriteLine($"dynamicVar 的类型:{dynamicVar.GetType()}");Console.WriteLine($"dynamicVar 的值:{dynamicVar}");// 修改 dynamic 变量的类型和值dynamicVar = "Hello, C#!";Console.WriteLine($"修改后 dynamicVar 的类型:{dynamicVar.GetType()}");Console.WriteLine($"修改后 dynamicVar 的值:{dynamicVar}");}
}

在上述代码中,dynamicVar 是一个使用 dynamic 关键字声明的变量,可以在运行时更改其类型和值。

可空类型

在我们在对数据库进行操作时,希望变量表示未保存的有效值时,针对引用类型可以将变量设为 null。然而,对于值类型,无论内容是否有意义,内存都会分配可空类型允许创建标记为有效或无效的值类型变量,通过布尔指示器确定值的有效性。普通的值类型称为非可空类型。

实例演示

程序员

根据以上文字列举示例代码

在这里插入图片描述

using System;class NullableTypeExample
{static void Main(){// 非可空类型int nonNullableInt = 42;Console.WriteLine($"非可空整数:{nonNullableInt}");// 可空类型int? nullableInt = null;Console.WriteLine($"可空整数(未赋值):{nullableInt}");// 可空类型赋值nullableInt = 100;Console.WriteLine($"可空整数(已赋值):{nullableInt}");}
}

补充

程序员

这个有什么作用

在这里插入图片描述

int? 是 C# 中的可空类型(Nullable Type)的表示方法。在这个语法中,? 表示这个类型可以存储正常的 int 值,也可以存储 null 值。这样就允许我们在值类型中表示“无效”的状态。

因此,int? nullableInt = null; 这行代码表示声明了一个可空整数类型的变量 nullableInt,并将其初始化为 null,表示当前没有有效的整数值。如果需要存储实际的整数值,可以随时赋值。

总结

今天的分享就到此结束了,感谢大家的喜爱!如果你觉得本文不错,请给予点赞和收藏,记得关注我的更新哦!你们的支持是我不断更新的动力!

回到顶部

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

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

相关文章

【深度学习目标检测】十六、基于深度学习的麦穗头系统-含GUI和源码(python,yolov8)

全球麦穗检测是植物表型分析领域的一个挑战,主要目标是检测图像中的小麦麦穗。这种检测在农业领域具有重要意义,可以帮助农民评估作物的健康状况和成熟度。然而,由于小麦麦穗在视觉上具有挑战性,准确检测它们是一项艰巨的任务。 全…

使用emu8086实现——顺序程序设计

一、实验目的 1. 掌握顺序程序设计方法 2. 掌握汇编语言编程设计方法。 二、实验内容 1.用查表的方法将一位十六进制数转换成它相应的ASCII码。 代码及注释: Data segment ;定义数据段Tab db 30h,31h,32h,33h,34h,35,36h,37h,38h,39h ;定义一个Tab的字节型…

js逆向第20例:猿人学第19题乌拉乌拉乌拉

文章目录 一、前言二、定位关键参数1、JA3/TLS指纹怎么查看2、加密值长度对比三、代码实现四、参考文献一、前言 任务十九:抓取这5页的数字,计算加和并提交结果 此题在以前用python写逆向代码是存在缺陷的,直到今年有个大佬开源了curl_cffi库,并且支持 JA3/TLS 和 http2 指…

npmvue详解

1、npm是node.js的一个软件依赖包管理工具 2、当前目录下面一般会有一个package.json文件 3、npm install 会去按照package.json文件中的依赖去下载依赖包 默认会下载到当前目录中的node_modules文件夹下,-g会进行全局安装 4、package.json文件中有两种依赖关系 …

H7303 无电感,线性恒流,低压差,大电流,车灯/台灯 9V 12V 24V 30V

线性恒流芯片是一种用于控制电流的电子元件,通常用于驱动LED等器件。它的工作原理是通过维持输出电流的恒定来保持被驱动器件的亮度或功率稳定。 具体来说,线性恒流芯片会监测输出电流并调整电压以保持恒定的电流流过被驱动器件。以下是其基本工作步骤&…

MaxKey 单点登录认证系统——实现登录后自动跳转及分析思路

Maxkey单点登录系统集成业务系统应用之后,登录界面登录之后不会自动跳转业务系统,需要在首页点击相应应用之后,才能实现跳转业务系统,故以下本人提供解决方法和分析思路。 环境配置 本例使用的是CAS协议实现单点登录 Maxkey 服务…

企业如何做到安全又极速的分发传输大文件

在当代企业运营中,文件的传输和分发是至关重要的任务。然而,随着文件体积的增大和信息敏感性的凸显,企业需要找到一种既安全又能够高效传输大文件的方法。本文将深入探讨如何在企业环境中实现安全又高效的大文件传输。 一、分发大文件时需要注…

day-08 构造限制重复的字符串

思路 首先统计每个字符的个数&#xff0c;然后从后向前按照题意添加字符 解题方法 从后向前添加字符&#xff1a;1.当前字符个数<repeatLimit,直接添加 2.当前字符个数>repeatLimit,添加repeatLimit个&#xff0c;然后插入一个下一级字符 时间复杂度:O(n) 空间复杂度:…

在CentOS中,对静态HTTP服务的性能监控

在CentOS中&#xff0c;对静态HTTP服务的性能监控和日志管理是确保系统稳定运行和及时发现潜在问题的关键。以下是对这一主题的详细探讨。 性能监控 使用工具监控&#xff1a;top、htop、vmstat、iostat等工具可以用来监控CPU、内存、磁盘I/O等关键性能指标。这些工具可以实时…

【C++】map和set的模拟实现

map和set的模拟实现 插入模拟实现正向迭代器模拟实现插入完整实现map的[ ]接口模拟实现正向迭代器完整代码反向迭代器模拟实现 喜欢的点赞&#xff0c;收藏&#xff0c;关注一下把&#xff01; 在前面几篇C的博客&#xff0c;讲过了二叉搜索树&#xff0c;AVL树&#xff0c;红黑…

Halcon边缘滤波器edges_image 算子

Halcon边缘滤波器edges_image 算子 基于Sobel滤波器的边缘滤波方法是比较经典的边缘检测方法。除此之外&#xff0c;Halcon也提供了一些新式的边缘滤波器&#xff0c;如edges_image算子。它使用递归实现的滤波器&#xff08;如Deriche、Lanser和Shen&#xff09;检测边缘&…

Android中集成FFmpeg及NDK基础知识

前言 在日常App开发中,难免有些功能是需要借助NDK来完成的,比如现在常见的音视频处理等,今天就以ffmpeg入手,来学习下Android NDK开发的套路. JNI和NDK 很多人并不清除JNI和NDK的概念,经常搞混这两样东西,先来看看它们各自的定义吧. JNI和NDK 很多人并不清除JNI和NDK的概念…

成就动机测试

成就动机测试广泛应用在职业发展领域&#xff0c;如&#xff1a;企业Hr人力资源管理部门&#xff0c;用于评估分析员工的潜能和价值&#xff0c;适用场景有人才招聘&#xff0c;岗位晋升&#xff0c;绩效考评等等。在大学生做职业规划&#xff0c;求职应聘中&#xff0c;应用成…

【python】基础知识类的语法功能讲解

Python代码定义了一个名为Calculation的类&#xff0c;用于执行基础的数学运算&#xff08;加法、减法、乘法、除法和取模&#xff09;。下面我将详细解释各个部分的功能&#xff0c;并以列表形式总结&#xff1a; 类定义&#xff1a; class Calculation: 定义了一个名为Cal…

CMake在静态库中链接动态库

hehedalinux:~/Linux/multi-v3$ tree . ├── calc │ ├── add.cpp │ ├── CMakeLists.txt │ ├── div.cpp │ ├── mult.cpp │ └── sub.cpp ├── CMakeLists.txt ├── include │ ├── calc.h │ └── sort.h ├── sort │ ├── …

SpringBoot项目里用MultipartFile作为入参获取到的file为什么null

前言&#xff1a; 最近在项目中用到了Excel模板导入功能&#xff0c;但是在测试阶段用Postman测试时&#xff0c;通过Post请求&#xff0c;传到后端的File一直为null。其中前端传参和请求都没问题&#xff0c;后端的接参也没问题&#xff0c;问题出在过滤器的复用上。 问题场…

外包干了5个月,感觉技术退步明显......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01; 而我已经在一个企业干了四…

Spring Security入门

目录 1.简介 与shiro对比 添加依赖 执行流程 2.UserDetailsService User实现类 3.PasswordEncoder BCryptPasswordEncoder 4.自定义登录逻辑 5.自定义登录界面 6.设置请求账户和密码的参数 7.自定义登陆处理器 成功 失败 8.判断 权限判断 角色判断 …

navicat for oracle

前言 Oracle中的概念并不是创建数据库&#xff0c;而是创建一个表空间&#xff0c;然后再创建一个用户&#xff0c;设置该用户的默认表空间为我们新创建的表空间&#xff0c;这些操作之后&#xff0c;便和你之前用过的mysql数据库创建完数据库一模一样了。 创建数据库 使用O…

Error: Failed to download template from registry: fetch failed

第一次构建Nuxt项目时&#xff0c;出现在这样的错误&#xff01;&#xff01;&#xff01; 如果你也是这样得错误&#xff0c;修改hosts也没用。我试了 是因为你的npm安装了其他镜像源&#xff0c; 这个时候你就需要手动下载了&#xff1a; web端访问&#xff1a; https://ra…