网站首页 > 技术文章 正文
在编程的世界里,数据类型是构建程序的基石。它们定义了数据的存储方式和操作方式。
C# 是一种强类型语言。每个变量和常量都有一个类型,每个求值的表达式也是如此。每个方法声明都为每个输入参数和返回值指定名称、类型和种类(值、引用或输出)。
在C#中,数据类型被分为三大类:值类型、引用类型和指针类型。
一. 值类型(Value types)
C# 中的值类型是从 System.ValueType 类中派生出来的,对于值类型的变量我们可以直接为其分配一个具体的值。
当声明一个值类型的变量时,系统会自动分配一块儿内存区域用来存储这个变量的值,需要注意的是,变量所占内存的大小会根据系统的不同而有所变化。
值类型直接包含数据。比如 int、char、float,它们分别存储数字、字符、浮点数。当声明一个 int 类型时,系统分配内存来存储值,通常这个值会直接存储与栈中,而不是堆中。
常见的值类型如下图:
除了上述值类型的简单类型之外,C# 程序还包括以下用关键字声明的值类型种类:
1.枚举类型(Enumeration)
枚举类型是由基础整型数值类型的一组命名常量定义的值类型。C# 程序中使用 enum 关键字定义枚举类型并指定枚举成员的名称。
2.结构类型(Structure)
结构类型是是一种可封装数据和相关功能的值类型,C# 程序中使用 struct 关键字定义结构类型。
3.元组类型(Tuple)
元组功能提供了简洁的语法来将多个数据元素分组成一个轻型数据结构。
4.可为空的值类型(Null)
可为 null 值类型 T?(T 表示泛型)表示其基础值类型T 的所有值及额外的 null 值。
二. 引用类型(Reference types)
引用类型的变量中并不存储实际的数据值,而是存储的对数据(对象)的引用,换句话说就是,引用类型的变量中存储的是数据在内存中的位置。
当多个变量都引用同一个内存地址时,如果其中一个变量改变了内存中数据的值,那么所有引用这个内存地址的变量的值都会改变。
C# 中内置的引用类型包括 Object(对象)、Dynamic(动态)和 string(字符串)。
1.对象类型(Object)
对象类型是 C# 通用类型系统(Common Type System:CTS)中所有数据类型的最终基类,Object 是 System.Object 类的别名。任何类型的值都可以分配给对象类型,但是在分配值之前,需要对类型进行转换。
将值类型转换为对象类型的过程被称为“装箱”,反之将对象类型转换为值类型的过程则被称为“拆箱”。只有经过装箱的数据才能进行拆箱。
2.动态类型(Dynamic)
可以在动态类型的变量中存储任何类型的值,这些变量的类型检查是在程序运行时进行的。
动态类型与对象类型类似,但对象类型变量的类型检查是在编译时进行的,而动态类型变量的类型检查则是在程序运行时进行的。
3.字符串类型(String)
字符串类型的变量允许您将一个字符串赋值给这个变量,字符串类型需要通过 String 类来创建,String 类是 System.String 类的别名,它是从对象(Object)类型中派生的。在 C# 中有两种定义字符串类型的方式,分别是使用" "和@" "。
三. 指针类型(Pointer types)
在C#中,指针类型是一种特殊的数据类型,它允许程序直接操作内存地址。使用指针,你可以访问和修改存储在特定内存地址的数据。
指针通常与非托管代码(unmanaged code)一起使用,它们在处理底层系统资源、内存管理或者与C/C++代码交互时非常有用。
指针是变量的内存地址,涉及到指针的代码必须写到unsafe代码块(或方法)中。指针的定义用*:
了解C#中的数据类型对于编写高效、可靠的程序至关重要。无论是选择正确的数据类型来存储数据,还是理解不同数据类型之间的差异,都是每个C#开发者必须掌握的技能。
猜你喜欢
- 2024-11-12 C#-练习题 014(c#程序题及答案)
- 2024-11-12 C# 类型转换(c类型转换有哪三种形式)
- 2024-11-12 C#-无参数有返回值的方法 060(有参无返回值 c语言)
- 2024-11-12 C#中的值类型和引用类型(c# 引用类型)
- 2024-11-12 abelkhan中的rpc框架(rpc框架应用场景)
- 2024-11-12 C#编程零基础到入门学习-C# 值类型和引用类型(4-8)
- 2024-11-12 2.6 C#的常用关键字和预定义类型(c#预留关键字)
- 2024-11-12 C#_图片拖拽(c#窗体图片移动)
- 2024-11-12 数据类型 - C#入门教程(c#常见数据类型)
- 2024-11-12 C#中堆栈(Stack)和堆(Heap)的区别——第一部分
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)