C# 字面量null对于引用类型变量✓和值类型变量×

news2024/9/20 17:21:51

2fa758bc1a934b0987c1da829a9de303.jpg

794c65995ada4f0eb24b86afe4a47723.jpg 

32310de370484359aec5cde9b73d284a.jpg编译器让相同的字符串字面量共享堆中的同一内存位置以节约内存。 

在C#中,字面量(literal)是指直接表示固定值的符号,比如数字、字符串或者布尔值。而关键字(keyword)则是由编程语言定义的具有特殊含义的标识符,用于表示语言的结构和语义。简而言之,字面量是值的表达方式,而关键字是语言的组成部分,用于定义语法和行为。

c3766686a2c7460ca8e87e3e76a05c58.jpg

c48ffd4169cd4e2ca45baa93550f93cf.jpg 

a5ce17b5355b4768a565bdfc46b29231.jpg

当我们谈到C#中的字面量时,我们指的是直接表示固定值的符号或文本。例如:

- 整数字面量:`10`, `1000`, `-5`
- 浮点数字面量:`3.14`, `2.718`, `-0.5`
- 字符串字面量:`"hello"`, `"world"`, `"123"`
- 布尔值字面量:`true`, `false`

这些字面量直接表示它们所代表的值,不需要进一步解释或计算。

而关键字是C#语言中具有特殊含义的标识符,用于表示语言的结构和语义。这些关键字是编程语言的一部分,有着固定的含义和用法。例如:

- `class`:用于定义类。
- `if`、`else`:用于条件语句。
- `for`、`while`:用于循环语句。
- `public`、`private`:用于定义成员的可访问性。
- `static`:用于定义静态成员。

这些关键字在编写代码时具有特殊的含义和作用,它们用于定义程序的结构和行为,而不是直接表示值。

 

引用类型变量和字面量之间的联系在于变量可以指向字面量所代表的值。

在C#中,引用类型变量是指向对象的引用,而对象可以是在堆上分配的实例,比如类实例。当你使用一个引用类型变量时,你实际上是在操作该变量所引用的对象,而不是直接操作对象本身。

例如,假设有一个字符串类型的引用类型变量:

```csharp
string str;
```

你可以将该变量指向一个字符串字面量:

```csharp
str = "hello";
```

在这种情况下,变量 `str` 引用了一个存储在内存中的字符串对象,该字符串对象的值为 `"hello"`。因此,引用类型变量允许我们引用字面量所代表的值。

C#中的 `string` 是一个引用类型,而不是值类型。所以 `string str;` 定义的是一个引用类型变量 `str`,它可以引用(或指向)一个字符串对象。

在C#中,所有的类都是引用类型,包括 `string` 类。因此,当你声明 `string str;` 时,你在声明一个引用类型变量 `str`,它可以引用一个字符串对象。而这个字符串对象可以是一个字符串字面量,比如 `"hello"`。

对于值类型(value types)来说,如 `int`、`float` 等基本类型,它们的变量直接存储值,而不是引用。因此,区分引用类型和值类型的一个简单方法是,引用类型的变量存储的是对象的引用,而值类型的变量存储的是值本身。

 在C#中,以下是一些常见的值类型:

1. 整数类型:

   - `int`:32 位有符号整数。

   - `long`:64 位有符号整数。

   - `short`:16 位有符号整数。

   - `byte`:8 位无符号整数。

   - 等等...

 

2. 浮点数类型:

   - `float`:32 位浮点数。

   - `double`:64 位浮点数。

   - `decimal`:128 位高精度十进制数。

   

3. 字符类型:

   - `char`:16 位 Unicode 字符。

 

4. 布尔类型:

   - `bool`:表示真或假。

 

5. 枚举类型:

   - `enum`:用于定义枚举类型。

 

6. 结构体类型(Structs):

   - 自定义的值类型,可以包含多个字段。

 

这些值类型的变量直接存储值本身,而不是引用,与引用类型相比,它们在内存中的存储方式和处理方式不同。

   看到一个值类型/引用类型之辨较好注解:fa4acabbc0894cdd96384b6ea69fe947.jpg

 

【扩展概念】

看这个图产生疑问:

问了问chatgpt

值类型为什么都是seal的?(国产ai回答蛮好:6d48d2de61d248e6bac5506c50c818e8.jpg

41a929514042464992b807c15b67f365.jpg 

 

 关于"所有值类型都是密封的吗?"这个问题:

【seal】建议先看最后俩图总结 不然有点子绕

 

chatgpt似乎对于sealed和中文概称密封强行理解了

【chatgpt迷惑行为】99dc7be043604147b5db9aae076cb412.jpg

7139b83542eb489abcc7a73a5ada79ca.jpg

 

起源: bd018d29ce1147e6a214e93285a56965.jpg

可以为空的值类型nullable value types

e2d33be4a9e34e3aa5963712b23b270c.jpg691c472c36294121b5518b298f49b920.jpg

237bede134584044b1ec797ff1a58f57.jpg

 36309f292fd146ae91b2a45cf41a073c.jpg

 65d916fefe9f4dffb7c1ec3c1ba93e87.jpg

029f004e9ccd44eea7e848e4147f7b8b.jpg 

d897045e91964f5faaba9b13b5ef2916.jpg 

e71ea64b391d482194d1d7e472a53fce.jpg

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

积极探索新质生产力,九河云携手华为云技术交流引领数智跃迁

4月18日,九河云携手华为云举办了华为云SA技术培训会议,培训邀请到华为云技术人员作为主讲人,通过理论讲解与案例结合的方式,围绕ECS和EBS之间的联动,调优和数据保护等方面展开,深入浅出地讲解了基于EBS部署…

Python从0到100(十四):高级函数及函数使用进阶

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

【机器学习】分类与预测算法的评价与优化

以实际案例解析F1值与P-R曲线的应用 一、分类算法与性能评价的重要性二、F1值与P-R曲线的概念与意义三、实例解析:以垃圾邮件检测为例四、代码实现与结果分析五、结论与展望 在数据驱动的时代,机器学习算法以其强大的数据处理和分析能力,成为…

day07 51单片机-18B20温度检测

18B20温度检测 1.1 需求描述 本案例讲解如何从18B20传感器获取温度信息并显示在LCD上。 1.2 硬件设计 1.2.1 硬件原理图 1.2.3 18B20工作原理 可以看到18B20有两根引脚负责供电,一根引脚负责数据交换。18B20就是通过数据线和单片机进行数据交换的。 1&#xf…

PROSAIL模型前向模拟与植被参数遥感提取代码实现

原文链接:PROSAIL模型前向模拟与植被参数遥感提取代码实现https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247602140&idx7&sn7c4ca9239865d536ba81ba4c26a34031&chksmfa820e3bcdf5872d540c0dfe8c533c8696c8b4658427aab254f246a739f96b36bc37…

GPT 在目标设定中的应用:实现梦想的技术方法

在技术快速进步的时代,我们设定和实现目标的方式正在不断发展。 该领域最重要的创新之一是引入生成式预训练 Transformer (GPT)。 本文将探讨 GPT 技术如何彻底改变目标设定的艺术,提供实用的见解和案例研究来展示其影响。 GPT 和目标设定简介 ​ 了解 …

Ansible安装基本原理及操作(初识)

作者主页:点击! Ansible专栏:点击! 创作时间:2024年4月23日15点18分 Ansible 是一款功能强大且易于使用的IT自动化工具,可用于配置管理、应用程序部署和云端管理。它使用无代理模式(agentles…

控制台居然可以这么玩?五分钟带你上手ANSI指令,实现一个log工具包

目录 前言 基础知识 进阶实践 ANSI参数 ANSI类 JSLog类 工具的使用说明 配置相关 全局配置项 默认配置 基本用法 打印字符 添加全局配置项 清空所有样式及操作行为 校验传入的参数是否正确 样式控制 Node环境 浏览器中 光标控制指令 光标位置偏移 滚动条控…

Pytorch:张量的梯度计算

目录 一、自动微分简单介绍1、基本原理2、梯度计算过程3、示例:基于 PyTorch 的自动微分a.示例详解b.梯度计算过程c.可视化计算图 4、总结 二、为什么要计算损失,为何权重更新是对的?1、梯度下降数学原理2、梯度上升 三、在模型中使用自动微分…

力扣HOT100 - 199. 二叉树的右视图

解题思路&#xff1a; 相当于层序遍历&#xff0c;然后取每一层的最后一个节点。 class Solution {public List<Integer> rightSideView(TreeNode root) {if (root null) return new ArrayList<Integer>();Queue<TreeNode> queue new LinkedList<>…

element中file-upload组件的提示‘按delete键可删除’,怎么去掉?

问题描述 element中file-upload组件会出现这种提示‘按delete键可删除’ 解决方案&#xff1a; 这是因为使用file-upload组件时自带的提示会盖住上传的文件名&#xff0c;修改一下自带的样式即可 ::v-deep .el-upload-list__item.is-success.focusing .el-icon-close-tip {d…

vue 关键字变红

1.html <div v-html"replaceKeywordColor(item.title)" ></div> 2.js //value为搜索框内绑定的值 replaceKeywordColor(val) {if (val?.includes(this.value) && this.value ! ) {return val.replace(this.value,<font color"red&…

PyCharm 中的特殊标记

再使用 PyCharm 开发 Python 项目的时候&#xff0c;经常会有一些特殊的标记&#xff0c;有些是编辑器提示的代码规范&#xff0c;有些则为了方便查找而自定义的标记。 我在之前写过一些关于异常捕获的文章&#xff1a;Python3 PyCharm 捕获异常报 Too broad exception clause…

【电控笔记5.8】数字滤波器设计流程频域特性

数字滤波器设计流程&频域特性 2HZ : w=2pi2=12.56 wc=2*pi*5; Ts=0.001; tf_lpf =

块存储、文件存储、对象存储概念与区别

1. 块存储 块存储是将数据切分成固定大小的块&#xff0c;然后将这些块存储在物理设备&#xff08;如硬盘、固态硬盘&#xff09;上。每个块都有唯一的标识符&#xff0c;并且可以独立地被读取、写入或删除。块存储通常用于存储文件系统&#xff0c;例如操作系统的文件系统&am…

牛客周赛 Round 40(A,B,C,D,E,F)

比赛链接 官方讲解 这场简单&#xff0c;没考什么算法&#xff0c;感觉有点水。D是个分组01背包&#xff0c;01背包的一点小拓展&#xff0c;没写过的可以看看&#xff0c;这个分类以及这个题目本身都是很板的。E感觉就是排名放高了导致没人敢写&#xff0c;本质上是个找规律…

群辉安装python3教程

目录 群辉安装python3一、需求二、群辉套件安装python3三、ssh连接群辉&#xff08;一&#xff09;finshell连接群辉&#xff0c;root登录&#xff08;二&#xff09;安装pip3库&#xff08;三&#xff09;配置环境变量 四、测试 群辉安装python3 一、需求 需求&#xff1a;语…

【目标检测】YOLO系列-YOLOv1 理论基础 通俗易懂

为方便大家理解YOLO的原理&#xff0c;这里将YOLOv1的部分内容基础内容进行用比较直白的话和例子进行阐述&#xff0c;为后续大家学习YOLO作为铺垫。 1、模型所干的活 工作中&#xff0c;大家经常将 Word 文档 上传到某转换器&#xff0c;然后转换输出为PDF文档。目标检测中我…

认识rust中闻风丧胆生的命周期,不用过于担心,它对于所有人都是平等的

生命周期&#xff0c;简而言之就是引用的有效作用域。在大多数时候&#xff0c;我们无需手动的声明生命周期&#xff0c;因为编译器可以自动进行推导&#xff0c;用类型来类比下&#xff1a; 就像编译器大部分时候可以自动推导类型 <-> 一样&#xff0c;编译器大多数时候…

Rust Tracing 入门

Tracing 是一个强大的工具&#xff0c;开发人员可以使用它来了解代码的行为、识别性能瓶颈和调试问题。 Rust 是一种以其性能和安全保证而闻名的语言&#xff0c;在它的世界中&#xff0c;跟踪在确保应用程序平稳高效运行方面发挥着至关重要的作用。 在本文中探讨Tracing 的概…