我的C#学习历程

来源:互联网 发布:旅游cms开源 编辑:程序博客网 时间:2024/05/23 01:01

引用类型

引用类型包括类class,数组,接口,委托,object 和 string

访问引用类型的数据时,现在栈上找到引用变量,再根据引用变量中保存的地址找到堆中真正的数据。

定义一个引用类型变量只是在栈上申请了一个区域用于存放这个变量,实际操作该变量所引用的数据时,需要用new关键字在堆上申请一段内存。而string比较特殊;

class Program    {        static void Main(string[] args)        {            //***类***            //默认无参构造函数            Program pro = new Program();            //***数组***            char[] array1;            int[] array2 = new int[5];            //输出结果为默认的0            Console.WriteLine(array2[3]);            string[] array3 ={ "1","2","3","4","5" };            //输出的结果为4            Console.WriteLine(array3[3]);            //***链表***            List<int> list1;                        List<int> list2 = new List<int>();            List<int> list3 = new List<int>(5);            //链表是一个动态数组,容量可以根据需求改变            List<int> list4 = new List<int>() {1,2,3,4,5,6,};            //***string***            //string类型是个特例,他不需要new关键字申请堆中内存            //创建string类型变量时,可以直接给其赋值            string s = "abcd";            //string也是一个类,其中有很多可用的API            //public String(char[] value);            char[] c = { '1','2'};            string ss = new string(c);            //public String(char* value);            //等同于5个A            string sss = new string('A',5);                    }    }


引用类型变量存放的是数据在堆中存放的内存起始地址,将一个引用类型变量赋值给另一个引用类型变量时

两个引用类型变量指向堆中同一段数据内存,操作这两个引用类型变量中的任意一个,都会改变另一个。

如下:




而string类型不同,如str1和str2都是string类型变量,str1="aaa";则str1指向堆中存放"aaa"的内存区域,

str2=str1;str2也指向"aaa";若str2="bbb";此时str2指向堆中存放"bbb"的内存区域,而str1仍然指向"aaa"



string类中的一些方法运用

 static void Main(string[] args)        {            string str = "abcdefc";            string str1 = "snd";            //输出 3 ,即指定字符在此字符串中第一个匹配项从零开始的索引            Console.WriteLine(str.IndexOf('c'));            //若指定字符未被索引到输出 -1 ,如下:            Console.WriteLine(str.IndexOf('m'));            //在实例中指定的索引位置插入指定的字符串,返回一个新的字符串            string str2 = str.Insert(5, str1);            foreach (char i in str2)            {                //输出结果是a b c d e s n d f c                Console.Write("{0} ", i);            }                    //在指定实例中删除指定起始下标和指定长度的一段字符            string str3 = str.Remove(1, 3);            foreach (char i in str3)            {                //输出结果是a e f c                Console.Write("{0} ", i);            }            //按照指定的字符或字符串分割字符串,返回字符串数组            string _str = "q,w,e,r,t";            string[]car=_str.Split(',');            for(int i = 0;i < car.Length;++i )            {                //输出结果是q w e r t                Console.Write("{0} ", car[i]);            }            //获取字符串的一部分内容组成新的字符串            string ss = _str.Substring(1, 3);            foreach (char i in ss)            {                //输出结果是 , w ,                Console.Write("{0} ", i);            }        }



0 0
原创粉丝点击