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} ", "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。

    

原文地址:https://www.cnblogs.com/huang3/p/4917996.html