C#中的变量祥解

一、C#数据类型:

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的优势

4.数组类型

在 C# 中,数组实际上是对象,数组是一种数据结构,它包含若干相同类型的变量。

数组具有以下属性:

  • 数组可以是 一维、 多维或 交错的。
  • 数值数组元素的默认值设置为零,而引用元素的默认值设置为 null。
  • 交错数组是数组的数组,因此其元素是引用类型并初始化为 null。
  • 数组的索引从零开始:具有 n 个元素的数组的索引是从 0 到 n-1。
  • 数组元素可以是任何类型,包括数组类型。
  • 数组类型是从抽象基类型 Array 派生的 引用类型。 由于此类型实现了 IEnumerable 和 IEnumerable< T> ,因此可以对 C# 中的所有数组使用foreach 迭代。

用户自定义类型包括 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