一, C# 数据类型:
A: 值类型
值类型变量可以直接分配一个值, 它是从 System.ValueType 派生而来, 值类型直接包含数据, 比如 int,char,float, 他们分别存储整型数据, 字符, 浮点数, 当你申明一个值类型时, 系统分别空间来存储值类型的数据, 值类型包含以下类别:
此外, 结构体, 及枚举类型也都属于值类型.
B: 引用类型
引用类型不包含存储在变量中的实际数据, 但是它们包含对数据的引用, 换句话说, 它指向内存中的位置, 如果内存中的数据是由一个变量改变的, 其它变量也会自动反映这种变化, 内置的引用类型有 object,dynamic,String
1.object 类型
object 类型是 C# 通用类型系统所有数据类型的终极基类, Object 是 System.Object 类的别名, 所以 Object 类型可以被分配成任何其它类型 (值类型, 引用类型, 预定义类型或用户自定义类型) 的值, 但是在分配之前需要进行类型转换. 当一个值类型转换为引用类型时称为装箱, 当一个值类型转换为 Object 时称为拆箱, 拆装箱是非常损耗内存的, 会影响程序的执行效率, 所以要尽量避免执行拆装箱操作.
- int ii=9;
- object o = ii;
装箱操作
- object o = 9;
- int ii = (int)o;
拆箱操作
2.dynamic 类型
您可以存储任何类型的数据在动态类型中, 这些变量类型检查是在程序运行时发生的. 动态类型和对象类型相似, 但是对象类型的类型检查是在编译时发生的, 而动态类型变量的类型检查是在运行时发生的.
- dynamic type;
- type = "11111";
- dynamic
3.string 类型
允许您给变量分配任何字符串值, 字符串的赋值比较特别, 字符串是 "不可变的", 对字符串的操作实质是返回新的字符串操作,
- string str1 = "A";
- string str2 = "B";
- str1 += str2;
- String
执行完代码后 str1 = "AB",str1 指向了新的内存空间, 但是之前的 A 并没有消失, 还占据着内存等着 GC 对其进行回收.
假如大量操作字符串会令程序性能下降, 所以产生了 StringBuider
- StringBuilder sb = new StringBuilder("Hello");
- sb.Append("Word");
- sb.Append("!");
- StringBuilder
只有在大量进行字符串操作时才能体现出 StringBuilder 的优势
用户自定义类型包括 Class,delegate,interface
C: 指针类型
C# 中的指针类型和 C,C++ 中的一样, 都是指向一片内存地址, 但是在 C# 中尽量少用指针类型.
二, C# 中数据类型转换
数据类型的转换包括显示类型转换和隐式类型转换,
1. 隐式类型转换
隐式类型转换主要发生在 C# 默认数据转换是安全的情况下, 比如 int 型赋值给 double 型:
- int i = 3;
- double d = i;
一般情况下小转大不会发生数据的丢失, 所以可以用隐式类型转换.
2. 显示类型转换
显示类型转换包含两种:
一种是将字符串转换为想要的数据类型, Parse
- string str = "3";
- i = int.Parse(str);
这种转换方式有一个弊端, 那就是待转换的字符串确实可以转换为 int, 一旦待转换的字符串不可以转换成为对应的类型, 就会报错. 为了克服这个弊端, 可以用 TryParse
另一种就是万能转换 Convert.To
- string str = "3";
- double s = Convert.ToDouble(str);
- Convert.To
来源: https://www.cnblogs.com/Artist007/p/11359713.html