C#学习笔记(1):数据类型
以《C#6.0本质论(Essential C# 6.0)》为基本,参考《深入解析C#(C# in Depth, 4th Edition)》、《C#图解教程(Illustrated C# 7, 5th Edition)》。圆括号内是本质论书中位置、方括号是个人补充
值类型
值类型的变量和临时值经常是存储在称为栈的临时存储池中(P237)
除了string和object是引用类型,所有C#“内建”类型都是值类型(P239)
字面量
引用类型
引用类型的变量存储的是引用(通常是内存地址),要去内存地址找到对象实例的数据......所以引用类型的变量关联了两个存储位置:直接和变量关联的存储位置【堆】,以及由变量中存储的值引用的存储位置【栈】(P237)
字符串
string类型的关键特征在于它是不可变的(immutable)(P35)
null和void
null表示将变量设为“无”。null值只能赋值给引用类型、指针类型和可空类型(P37)
和根本不赋值相比,将null赋给引用类型的变量是完全不同的概念。赋值为null的变量已被设置,而未赋值的变量未被设置。将null值赋给一个string变量,并不等同于将空字符“”赋给它。null意味着变量无任何值,而“”意味着变量有一个称为空字符串的值。(P37)
var
var告诉编译器:应该由编译器根据声明时所赋的值推断数据类型(P38)
结构
结构不允许包含用户定义的默认(无参)构造器。而当没有提供默认的构造器时,C#编译器自动地产生一个默认的构造器将所有字段初始化为各自的默认值(P240)
数据转换
显式转型是交给”运行时“,但是运行时可能引发异常(P42)
装箱开箱
装箱
- 从值类型的变量(直接引用其数据)转换成引用类型(引用堆上的一个位置)时,会涉及以下几个步骤:在堆上分配内存 >> 接着发生一次内存赋值 >> 转换结果是对堆上的新存储位置的引用。(P243)
- 装箱影响性能和行为(P243)
拆箱
拆箱转换先检查已装箱的值的类型兼容于要拆箱成的值的类型,然后复制堆中存储的值(P243)
枚举
- 关键特征是在编译时声明了一组可以通过名称来引用的常量值(P249)
- 默认第一个枚举值是0,后续每一项都递增1(P250)
- 若显示赋值为x,所以它后面的值会递增1(P250)
良构类型
重写ToString()
重写GetHashCode()
ReferenceEquals()的静态方法,能显示地检查对象同一性......引用的相等性并不是唯一“相等性”(P261)
重写Equals()
数据相等,应当是标识数据必须相等(P264)
操作符重载
转换模式是:在一个方向显式,相反方向上隐式(P272)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端