五大数据类型:
类 结构体 枚举 接口 委托
值类型(放在栈,基类是ValueType,分配一个值)和引用类型(放在堆,基类除了ValueType都可以。指向一个内存位置)
值类型在越出定义的作用域时消失,引用类型当堆被垃圾回收时。
值类型赋值给另一个的时候,就是对字段成员进行复制。
引用类型是在内存中重定向引用变量的指向。
C#中定义的值类型包括原类型(Sbyte、Byte、Short、Ushort、Int、Uint、Long、Ulong、Char、Float、Double、Bool、Decimal)、枚举(enum)、结构(struct)
引用类型包括:对象、类、数组、接口、委托、字符串(String)等。
字符串是不可变的。值会存在堆中。
string s1=new string("111");
会开辟两个对象,一个存内存地址在栈中,一个存数据放入堆中。
String类型的方法其实返回了一个按修改格式的新字符串对象。
在调用了大写之后,String字符串依旧没有变换。
C#可空类型 null用来建立一个空的对象引用,值类型不能被赋空。
枚举
在创建系统的时候,创建一组符号名来对应已知的数字值会很方便(符号代替数字)。 例如:
Enum EmpType
{
Manager,//默认情况从0开始, 也可以自己赋值 但也不可以不连续
Grunt,//1
Contractor,//2
VicePresident,//3
}
使用枚举
在上面的枚举中,必须以枚举名(EmpType)来设置值。
设置Grunt
根据枚举名 EmpType emp=EmpType.Grunt; emp的值就是Grunt。
StringBuilder
StringBuilder sb = new StringBuilder("1111");//利用构造函数创建 StringBuilder sb1 = new StringBuilder(20);//申请了一个占有20个字符大小的 StringBuilder sb2 = new StringBuilder("11111", 20);//string字符串内容不可变动,如果字符串内容会频繁的变动,使用StringBuilder. sb.Append("2222222"); sb.Insert(0, "0000");//在0位置加入,后面字符串向后移动 sb.Remove(0,4);//从哪个位置开始移除,第二参数是移除的长度 sb.Replace("2","3");//替换字符 Console.WriteLine(sb.ToString()); Console.ReadKey();
PS:对于字符串频繁的操作。我们建议使用StringBuilder,因为其在堆中开辟了一定大小的内存,如果增加字符串只需要往内存中添加不需要另外开辟内存空间,而string则会另外开辟内存存放新的字符串并将老的字符串复制过去。