C#第二讲
一、值类型,引用类型
1、值类型:所有数值类型是值类型(int,float,double,枚举,布尔类型,结构,引用的地址,...等数值型值)
A、所有的值类型是储存在栈里面。
B、值类型的赋值,就是值的拷贝。
2、引用类型:对象,字符串,object,数组,...等有复杂模型的值
A、引用类型的值储存在堆里面的,栈里面储存的是它的引用地址。
B、引用类型的赋值实际上就是地址的拷贝。
3、类成员的调用方法
A、要去调用一个雷里面的非静态成员(属性【也叫字段】,方法),就要通过累的一个实例对象来调用。
B、类里面的静态成员(用static标注的成员)是只需通过类直接调用。
4、由类生成实例化对象时内存状态
A、类生成实例化对象时将所有非静态成员全部生成在堆里面,成员中的方法是储存在方法区,堆里面只存储方法的地址。
B、类中的静态成员单独储存在静态区中,所以不需要实例化直接通过类区调用。
C、当去实例化一个类的对象的时候,首先会在堆里面检索该类型的对象是否存在,如果存在就拷贝一份来做新的实例。
** 实例化对象时类里面的值类型和引用类型都会储存在堆里面。
5、装箱、拆箱
值类型转换成引用类型叫装箱。
如:int i=2; //值类型变量i
Object j=(object)i; //把值类型变量i转换成object类型变量j,此时j里面的值为"2"。
引用类型转换成值类型叫拆箱。
如:Object j="123"; //在object变量j里储存字符型数据123
int I=(int)j; //把object变量j转换成int类型变量i,此时i里面的值为123。
6、变量类型
全局变量:类里面在方法外面的变量
局部(成员)变量:在方法里面的变量
静态变量:用static标注的全局变量或局部(成员)变量
7、显示转换和隐式转换
隐式转换没有性能损耗,显示转换有性能损耗。
8、【:?】和【??】的用法
int i = a > b ? 10:20; //当a>b时i取值10,否则i取值20。
string s = a ?? b //当a为null时s取b的值。
二、字符串
1、字符串转换成字符数组
string = "sdfhiudshfoiuhfoiuewhf"
char[] a = s.ToCharArray(); //ToCharArray时C#中获得字符数组的方法,在jq中是Split来获得字符数组。
2、Compare方法
strA < strB 则返回-1(负值)
strA = strB 则返回0
strA > strB 则返回1(正值)
** 字符串比较时比较的是同一位置的ASCII码的大小。
3、Equals方法
判断两个字符串是否相同,如果相同返回值为true,否则为false。
4、定位字符串
StartWith/EndWith 判断一个字符串是否以一个字符串开头/结尾,返回值true/false
indexOf/LastindexOf 某个指定的字符或字符串第一次(最后一次)出现的位置
5、截取字符串
string.Substring(起始位置[,截取长度]) //截取string中起始位置开始的指定长度。
string s1 = "abcdfeghijklmn";
string s = s1.Substring(3, 2); //起始位置是从0开始的,结果是【df】。
6、插入和填充字符串
A、insert方法
string str1 = "hello ";
string str2 = "hi world";
string str3 = str2.Insert(3, str1); //结果是【hi hello world】。
B、PadLeft/PadRigth方法
string str1="hi";
string str2=str1.PadLeft(4,'@') //目标字符串长度不足时用指定字符[@]来填充左边,结果是【@@hi】。
string str2=str1.PadRigth(4,'@') //目标字符串长度不足时用指定字符[@]来填充右边,结果是【hi@@】。
7、删除和剪切字符串Remove方法
A、Remove(起始位置,删除的数量) //在字符串的起始位置开始删除指定数量字符。
string str2 = "hi world";
string str3 = str2.Remove(0, 3); //结果是world。
B、Trim、TrimStart、TrimEnd方法
Char[] str1={'@','#','$',' '};
string str2=" @China$# ";
string str3=str2.Trim(str1); //在str2中删除所有开始和结尾字符满足str1数组中符合的字符,如果没有
指定str1就默认去掉前后空格,本例结果是【Chain】。
C、CopyTo方法
string str1="China";
char[]str2=new char[100];
str1.CopyTo(0,str2,0,3); //CopyTo的参数:要复制的字符的起始位置,目标数组,指定目标数组中开始
存放的位置,要复制的字符个数。本例结果是数组的0,1,2元素中存有Chi。
D、替换字符串
string str1="hello";
string str2=str1.Replace("ll","r"); //str1中的【ll】字符串用字符串【r】来替换。本例结果是【hero】。
E、格式化字符串
string.Format() //将指定字符串中的每个格式项替换为相应对象的值的文本等效项。
Console.WriteLine("{0,10} {1,10}\n", "Decimal", "Hex");
//{0,10}中第一个参数表示第0位置的替代项,第二个参数是为该项留出10个字符位,省略第二个参数则按替代内容
长度显示。本例结果是【 Decumal Hex】
string str1= String.Format("{0,10:G}: {0,10:X}", -32768);
//{0,10:G}中第一个参数表示第0位置的替代项,第二个参数是为该项留出10个字符位,冒号后面的参数是指定数据
格式:G是字符串型值,F是保留小树后两位的字符串型数字,D是10进制数,X是16进制数。本例结果是【 -32768 8000】
三、StringBuilder
1、字符串拼凑
耗费比较大的资源。
2、StringBuilder
StringBuilder sb =new StringBuilder();
sb.Append("aaa");
sb.Append("bbb"); //结果string sb中内容变为aaabbb。