中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

電子商務(wù)靜態(tài)網(wǎng)站建設(shè)心得上海網(wǎng)絡(luò)營(yíng)銷公司

電子商務(wù)靜態(tài)網(wǎng)站建設(shè)心得,上海網(wǎng)絡(luò)營(yíng)銷公司,關(guān)于網(wǎng)站建設(shè)的報(bào)告,網(wǎng)站開(kāi)發(fā)公司 商業(yè)計(jì)劃書內(nèi)容開(kāi)始多了,慢品慢嘗才有滋味。 一、命名空間namespace 用于解決類重名問(wèn)題,可以看作類的文件夾. 若代碼與被使用的類,與當(dāng)前的namespace相同,則不需要using. 若namespace不同時(shí),調(diào)用的方法&#xff1a…

內(nèi)容開(kāi)始多了,慢品慢嘗才有滋味。

?? ?
一、命名空間namespace

? ? 用于解決類重名問(wèn)題,可以看作類的文件夾.
?? ?若代碼與被使用的類,與當(dāng)前的namespace相同,則不需要using.
?? ?
?? ?若namespace不同時(shí),調(diào)用的方法:
?? ?1.寫出全稱:命名空間.類名
?? ?2.先using引用命名空間,再直接調(diào)用
?? ?
? ? 在vs2022中
?? ?若引用的方法提示有誤,鼠標(biāo)指向有誤處停2秒,會(huì)有燈光提示。
?? ?點(diǎn)擊燈光,有就多種更正方式,包括加入引用。
?? ?或者,直接在有誤處Alt+Shift+F10,也可快速提示。
?? ?
?? ?同一解決方案下,項(xiàng)目B要使用項(xiàng)目A中的類:
?? ?1.解決方案中項(xiàng)目B下,右擊引用,彈出窗口默認(rèn)就是本解決方案中的項(xiàng)目 。
?? ? ?選擇要引用的項(xiàng)目A,即引用項(xiàng)目A到項(xiàng)目B中。
?? ?2.引用命名空間:在最上面 ?using 項(xiàng)目A的命名空間
?? ?
?? ? 這樣在項(xiàng)目B中就可以使用項(xiàng)目A中定義的類。
?? ?
?? ?注意:在使用另一個(gè)項(xiàng)目中的類時(shí),要注意訪問(wèn)修飾符。
?? ? ? ? ?vs中默認(rèn)為internal,故應(yīng)改為public.否則無(wú)法訪問(wèn).

?? ?
二、值類型與引用類型

? ? 值類型:int double,float,bool,char,enum,結(jié)構(gòu)等
?? ?
?? ?引用類型:string,數(shù)組,類等
?? ?
?? ?值類型存儲(chǔ)在棧(stack)中,
?? ?引用類型存儲(chǔ)在堆(heap)中

?? ?
三、字符串

? ? 1.字符串的不可變性,
?? ? ?給字符串賦新值時(shí),堆中老值并不消失,而是開(kāi)辟新空間存儲(chǔ)新值,并指向新值。

?? ? ?string s="abcd";s="cdgf";//堆中abcd不消失,棧中s更新指向堆中新開(kāi)辟的空間,內(nèi)有cdgf


?? ? ?故原abcd就沒(méi)有聯(lián)系,若大量更改字串,會(huì)有大量的原值無(wú)聯(lián)系(內(nèi)存垃圾)
?? ? ?
?? ? ?當(dāng)程序結(jié)束時(shí),GC掃描整個(gè)內(nèi)存,若發(fā)現(xiàn)有的空間沒(méi)有被指向,立即銷毀。
?? ?

?? ? ? string s1="abc";stirng s2="abc";Console.ReadKey();//在此處下斷點(diǎn),


?? ?運(yùn)行上面代碼,中斷后,打開(kāi)即時(shí)窗口,輸入&s1回車,顯示s1的存儲(chǔ)的指針
?? ?同時(shí)*&s1取得該指針指向堆中的地址。同理輸入&s2加車,也可顯示上面內(nèi)容。
?? ? ? 可以看到&s1與&s2是不同的,即在棧中兩者存儲(chǔ)位置不同。
?? ? ? 但*&s1與*&s2是相同的,說(shuō)明存儲(chǔ)的是相同的地址(該地址指向同一堆地址)
?? ?
?? ?2.可將字符串看作char類型的一個(gè)只讀數(shù)組.
?

?? ? ?string s="abcdef";Console.WriteLine(s[0]);//as[1]=a;//錯(cuò)誤,不可更改,只讀?char[] c=s.ToCharArray;//轉(zhuǎn)為char數(shù)組c[1]=a;//c為aacdef,但是s沒(méi)有改變s=new string(c);//s改變,但不是原來(lái)存儲(chǔ)空間,是新開(kāi)的堆空間內(nèi)存


?? ?
?? ?注意:
?? ?ToCharArray:將字符串轉(zhuǎn)為char數(shù)組。
?? ?new string(c):將字符數(shù)組char[]轉(zhuǎn)為一個(gè)字符串。
?? ?

三、StringBuilder


?? ?using System.Text;
?? ?表示可變字符字符串。 此類不能被繼承
?? ?不開(kāi)辟空間,就在原空間更改,所以速度快。
?? ?
?? ?Stopwatch :準(zhǔn)確測(cè)量運(yùn)行時(shí)間的類。構(gòu)造函數(shù) new Stopwatch
?? ? ? 屬性Elapsed :當(dāng)前總運(yùn)行時(shí)間。返回只讀TimeSpan
?? ? ? ? ? ElapsedMilliseconds:返回總運(yùn)行時(shí)間(毫秒),只讀int64
?? ??? ? ? isRunning:是否運(yùn)行,返回bool
?? ??? ? ? ? ? ? ? ? ?調(diào)用start或StartNew開(kāi)始運(yùn)行,Stop或Reset停止。
?? ??? ? ? ElapsedTicks:已用時(shí)鐘(周期/刻度)數(shù),該數(shù)除Frequency得秒數(shù)
?? ??? ? ??
?? ? ? 方法StartNew:初始化新的Stopwatch實(shí)例,將運(yùn)行時(shí)間屬性設(shè)置為零,
?? ? ? ? ? ? ? ? ? ?然后開(kāi)始測(cè)量運(yùn)行時(shí)間
?? ? ? ? ? Stop:停止計(jì)時(shí)。再Start時(shí)會(huì)繼續(xù)計(jì)時(shí),Reset才清除以前計(jì)時(shí)。
?? ??? ? ? ReStart:停止測(cè)量,時(shí)間清零,重新開(kāi)始測(cè)量運(yùn)行時(shí)間。
?? ??? ? ? Reset: ?停止測(cè)量,時(shí)間清零
?? ??? ? ? GetTimestamp:獲取計(jì)時(shí)器機(jī)制中的當(dāng)前刻度數(shù).
?? ?注意:時(shí)鐘按周期/刻度進(jìn)行計(jì)數(shù),比如計(jì)數(shù)4000次,其Frequency表示1秒
?? ? ? ? ?中多少次,例如1秒1000次,那么上面時(shí)間4000/1000=4秒
?? ??? ? ?靜態(tài)時(shí)間字段Frequency可獲只讀頻率,
?? ?
?? ?StringBuilder創(chuàng)建實(shí)例時(shí),會(huì)自動(dòng)創(chuàng)建足夠的內(nèi)存空間來(lái)存儲(chǔ)字串。
?? ?Capacity表示空間的大小,可以創(chuàng)建多少字符。當(dāng)存儲(chǔ)字符大于該容量時(shí)會(huì)
?? ?自動(dòng)增大內(nèi)存,增加Capacity。Length是當(dāng)前字符串的長(zhǎng)度。
?? ?默認(rèn)Capacity為16,當(dāng)需要更多空間時(shí)會(huì)翻倍。容量也可以人為指定。
?? ?但是,若人為指定MaxCapacity后,到達(dá)最大上限不會(huì)再擴(kuò)而是引發(fā)異常。
?? ?
?? ?構(gòu)造函數(shù):
?? ?StringBuilder() ? ? ? ? ? ? 初始化新實(shí)例,字符串值為String.Empty
?? ?StringBuilder(int32) ? ? ? ?指定Capacity初始化實(shí)例
?? ?StringBuilder(String) ? ? ? 用指定字符串初始化
?? ?StringBuilder(Int32,Int32) ?指定起始容量到最大容量
?? ?StringBuilder(String,Int32) 指定容量和字符串
?? ?StringBuilder(String,Int32,Int32,Int32) 指定子串(前三參數(shù))和容量
?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?value,startIndex,Length,capacity
?? ?屬性:
?? ?capacity:容量,當(dāng)前實(shí)例最大字符數(shù)
?? ?Length: 長(zhǎng)度,當(dāng)前字符實(shí)際長(zhǎng)度
?? ?MaxCapacity:最大容量,一旦超限引發(fā)異常
?? ?Chars[]: 讀寫字符串某位置的字符。由于基于索引實(shí)例很大時(shí)會(huì)非常緩慢。
?? ?
?? ?方法:
?? ?Append(byte/int/float/double/char/bool/decimal) 以字符串形式追加
?? ?Append(char,Int32) 追加Unicod字符的字符串重復(fù)數(shù),后參數(shù)repeatCount
?? ?Append(char*,Int32) 不符合CLS,用下面替代。
?? ?Append(char[],Int32,In32)指定Unicode子數(shù)組追加
?? ? ? ? ? ? ? ? ? ? ? ? char[],startIndex,charCount
?? ??? ??? ??? ??? ??? ??
?? ?AppendLine() 將默認(rèn)的行終止符追加到實(shí)例末尾。
?? ?AppendLine(String) 追加字串后加入行終止符。
?? ? ? ? ? ? ? ? 默認(rèn)的行終止符為Environment.NewLine,即回車換行
?? ?Clear:清除實(shí)例中所有字符。Length將變成0.
?? ?
?? ?ToString() 將實(shí)例轉(zhuǎn)換為String
?? ?ToString(Int32,Int32)將實(shí)例中子串轉(zhuǎn)換為String。(starIndex,length)
?? ?
?? ?CopyTo(Int32,Char[],Int32,Int32)源字串起始位置開(kāi)始復(fù)制到目標(biāo)Char指定位置
?? ? ? ? ?(int sourceIndex,char[] destination,int desIndex,int count)
?? ?
?? ?Equals(StringBuilder) 是否與指定對(duì)象相等,返回bool
?? ?
?? ?Remove(int startIndex,int length) 將指定范圍字符移除
?? ?
?? ?Insert(Int32,byte/int/single/double/decimal/char/string)指定位置插入
?? ?Insert(int index,string value,int count)將子串一個(gè)或多個(gè)插入指定位置
?? ?Insert(int index,char[] value,int startIndex,int charCount)
?? ? ? ? ? 將指定Unicode字符的子串插入到指定位置
?? ?
?? ?Replace(char,char)
?? ?Replace(string,string)
?? ?Replace(char oldChar,char newChar,int startIndex,int length)
?? ? ? ? ? ?將實(shí)例中子串范圍的老字符,用新字符替換。
?? ?Repalce(string oldValue,string newValue,int startIndex,int Length)
?? ? ? ? ? ?同上,用新字串替換老字串
?? ?
?? ?例:string與StringBuilder的效率.107ms VS 3ms ?兩者用時(shí)直接秒殺
?? ? ? ?string每次都要開(kāi)辟堆空間浪費(fèi)時(shí)間,StringBuilder不用直接更改即可

?? ??? ?StringBuilder sb = new StringBuilder();string s = "";Stopwatch sw = Stopwatch.StartNew();for (int i = 0; i < 10000; i++){s += i;}sw.Stop();Console.WriteLine(sw.ElapsedMilliseconds);//107mssw.Restart();for (int i = 0; i < 10000; i++){sb.Append(i);}sw.Stop();Console.WriteLine(sw.ElapsedMilliseconds);//3ms


?? ??? ?
?? ?注意:一般最終會(huì)用ToString(),將StringBuilder轉(zhuǎn)為stringw使用。
?? ? ? ? 一切類型都可用ToString()將其轉(zhuǎn)為字符串類型。
?? ?
?? ?輸出你輸入字串的長(zhǎng)度:

?? ??? ?Console.WriteLine("隨機(jī)輸入你心中想到的一個(gè)名字:");//string s = Console.ReadLine();//兩者都有Length屬性StringBuilder s = new StringBuilder(Console.ReadLine());Console.WriteLine("你輸入名字的長(zhǎng)度是{0}", s.Length);?? ?


?? ?
?? ?比較相等:
?

?? ??? ?Console.WriteLine("A輸入你喜歡的課程:");string s1 = Console.ReadLine();//aaConsole.WriteLine("B輸入你喜歡的課程:");string s2 = Console.ReadLine();//aAif (s1.ToUpper() == s2.ToUpper())//大寫只返回副本,并不更改原字串{ //s1.Equals(s2,StringComparison.OrdinalIgnoreCase);Console.WriteLine("相同" + s1);//aa}else { Console.WriteLine("不相同" + s1); }Console.WriteLine("C輸入你喜歡的課程:");//ccStringBuilder s3 = new StringBuilder(Console.ReadLine().ToUpper());Console.WriteLine("D輸入你喜歡的課程:");//cCStringBuilder s4 = new StringBuilder(Console.ReadLine().ToUpper());if (s3.Equals(s4)){Console.WriteLine("相同" + s3.ToString());//CC}else{Console.WriteLine("不相同" + s4.ToString());//CC}


?? ?
?? ?splite分割并替換字串:

?? ??? ?string s = "a b e_f,,,s'k i*j";char[] c = { ' ', '_', ',', '*' };string[] ss = s.Split(c);//替換成""//刪除空串分割:string[] ss2 = s.Split(c, StringSplitOptions.RemoveEmptyEntries);string d = "2008-08-01";string[] dd = d.Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries);Console.WriteLine("{0,-6}年{1,-5}月{2:0}日", dd[0], dd[1], dd[2]);?

? ?

四、輸出中的復(fù)合格式字串


?? ?語(yǔ)法:{index[,alignment][:formatString]} ?由"索引,對(duì)齊:格式字串"組成
?? ?index: ? ? 索引,由0開(kāi)始,可多次引用。
?? ?alignment: 對(duì)齊,由當(dāng)前位置向后期間位置間,為正右對(duì)齊,為負(fù)右對(duì)齊.
?? ? ? ? ? ? ? 若不設(shè)置空白,緊接前面由本身長(zhǎng)度決定后方起始位置.
?? ?
?? ?formatString:格式化字串
?? ?時(shí)間自定義格式:
?? ??? ?d ? ? 月中某天
?? ??? ?dd ? ?月中某天,不足兩位,前面為0
?? ??? ?ddd ? 一周中某天縮寫,如周五Fri
?? ??? ?dddd ?一周中某天完整名稱,如周五Friday
?? ??? ?h ? ? 12小時(shí)制1-12
?? ??? ?hh ? ?12小時(shí)制01-12
?? ??? ?H ? ? 24小時(shí)制0-23
?? ??? ?HH ? ?24小時(shí)制00-23
?? ??? ?m ? ? 分鐘0-59
?? ??? ?mm ? ?分鐘00-59
?? ??? ?M ? ? 月份1-12
?? ??? ?MM ? ?月份01-12
?? ??? ?MMM ? 月份縮寫,六月Jun
?? ??? ?MMMM ?月份全寫,六月June
?? ??? ?s ? ? 秒0-59
?? ??? ?ss ? ?秒00-59
?? ??? ?t ? ? AM/PM中第一個(gè)
?? ??? ?tt ? ?AM/PM
?? ??? ?y ? ? 年0-99
?? ??? ?yy ? ?年00-99
?? ??? ?yyy ? 年份000-999,最少三位數(shù)
?? ??? ?yyyy ?
?? ??? ?: 時(shí)間分隔 ?/日期分隔 \轉(zhuǎn)義字符
?? ?
?? ?數(shù)字
?? ??? ?0 ?占位,無(wú)該數(shù)字/0用0
?? ??? ?# ?占位,無(wú)該數(shù)字/0省略
?? ??? ?. ? 小數(shù)點(diǎn)
?? ??? ?, ? 三位(千位)分隔
?? ??? ?% ? 數(shù)字乘以100,以百分位顯示?? ?
?? ??? ?%。 數(shù)字乘以1000,以千分位顯示
?? ??? ?E+0 ?結(jié)合上面
?? ??? ?\
?? ??? ?string 原樣
?? ??? ?; ? 僅一個(gè),
?? ??? ? ? ?兩個(gè),前面部分用于正值與零,后面用于負(fù)值。按最終四舍五入計(jì)入
?? ??? ??? ?三個(gè),前面用于正值,第二部分用于負(fù)值,最后零
?? ??? ??? ?12.345 ("#0.0#;(#0.0#);-\0-") -> 12.35 //第一部分
?? ??? ??? ?0 ("#0.0#;(#0.0#);-\0-") -> -0- ? ? ? ? //最后部分
?? ??? ??? ?-12.345 ("#0.0#;(#0.0#);-\0-") -> (12.35) //第二部分
?? ??? ??? ?12.345 ("#0.0#;(#0.0#)") -> 12.35
?? ??? ??? ?0 ("#0.0#;(#0.0#)") -> 0.0
?? ??? ??? ?-12.345 ("#0.0#;(#0.0#)") -> (12.35)
?? ?

五、string


?? ?定義:將文本表示為UTF-16代碼單元的序列,String繼承于Object.
?? ? ? ? ?也表示char對(duì)象的連續(xù)集合,一一對(duì)應(yīng)char的實(shí)例,故可用
?? ??? ? ?char數(shù)組來(lái)表示,唯一區(qū)別是String是只讀(不可變)
?? ? ? ?string最多為10億字符,約2GB

?? ? ?string s1="This is a string“;//直接賦字符串string s2=@"C:\a\b\c\d\e.txt“;//@取消轉(zhuǎn)義char[] c={'w','o','r','d'};string s3=new string(c);//wordstring s4=new string('c',4);//ccccstring s5="abc"+"efg";//abcefgs5+="aa"; ? ? ? ? ? ? //abcefgaachar a=s5[1];//b 索引從0開(kāi)始foreach(char b in s3){s+=b;}//wordword


?? ?
?? ?區(qū)別:
?? ?Null :string已聲明但未分配值,為Null,存儲(chǔ)的指針為\0,空指針。
?? ? ? ? string在棧上空間內(nèi)值沒(méi)有指向,堆上沒(méi)開(kāi)辟空間,是一個(gè)空指針
?? ?String.Empty: 即"",已聲明且在堆上已開(kāi)辟空間,但空間內(nèi)字串長(zhǎng)度為0.
?? ?WhiteSpace:空白字符,肉眼無(wú)法辨別,如:空格 回車換行,Tab等.
?? ?
?? ?unsafe 不安全
?? ? ?大部分C#是可驗(yàn)證的安全代碼(由.Net工具可驗(yàn)證代碼是否安全),一般安全代碼不會(huì)
?? ?直接使用指針訪問(wèn)內(nèi)存,也不會(huì)分配原始內(nèi)存而是創(chuàng)建托管對(duì)象。
?? ? ?C#支持unsafe,它不一定是危險(xiǎn)的,只是安全性由你自己掌握,不由.Net來(lái)管理驗(yàn)證。
?? ?語(yǔ)法:1.直接在類、方法等前面加入unsafe;
? ? ? ? ? ? ? 2.直接在代碼塊中使用unsafe.

? ? ? ? public static unsafe void Main(){//須在項(xiàng)目屬性中設(shè)置:允許不安全代碼,否則報(bào)錯(cuò)char[] c = { 'a', 'b', 'c', '\0', 'A', 'B', 'C', '\0' };string s = null;//由長(zhǎng)度指定fixed (char* cPtr = c) { s = new string(cPtr, 0, c.Length); }foreach (var ch in s) { Console.Write($"{(ushort)ch:x4} ?"); }Console.WriteLine();//0061 ?0062 ?0063 ?0000 ?0041 ?0042 ?0043 ?0000//不由長(zhǎng)度指定,向后找結(jié)束符'\0',遇到就結(jié)束,若一直無(wú),可能引發(fā)訪問(wèn)沖突fixed (char* cPtr = c) { s = new string(cPtr); }foreach (var ch in s) { Console.Write($"{(ushort)ch:x4} ?"); }//0061 ?0062 ?0063Console.ReadKey();}

?? ??? ? ?

?? ?
?? ?CLS:Common Language Specification公共語(yǔ)言規(guī)范
?? ? ? ?CLR集成了多種語(yǔ)言,若要相互訪問(wèn),須定義一個(gè)相互識(shí)別的規(guī)范,微軟就定義了CLS
?? ?不同語(yǔ)言編寫的對(duì)象就可彼此交互訪問(wèn)。
?? ?
?? ?1、string的構(gòu)造函數(shù)
?? ? ?String(Char*) ? ?(不符CLS)初始化指向Unicode字符數(shù)組的指定指針指示的值。
?? ? ?String(Char[]) ? 由指定字符數(shù)組初始化.
?? ? ?String(Sbyte*) ? 由指向8位有符號(hào)整數(shù)數(shù)組的指針指示的值來(lái)初始化
?? ? ?String(Char c,int Count) ? 指定重復(fù)次數(shù)的Unicode字符來(lái)初始化.為0則為Empty
?? ? ?String(Char* value,int startIndex,int length) ?指定字符指針數(shù)組的范圍來(lái)初始化
?? ? ?String(Char[] value,int startIndex,int length) 類似上面指定范圍初始化
?? ? ?String(Sbyte* value,int startIndex,int length) 類似上面指定范圍初始化
?? ? ?String(SByte* value,int startIndex,int length,System.Text.Encodeing enc)
?? ? ? ? ? ? ? ? ? ? ? 類似上面,指定編碼。若enc為null,則為ANSI編碼

? ? ? ? public static unsafe void Main(string[] args){char[] c = { 'a', 'b', 'c', '\u0000' };string s;fixed (char* cPtr = c) { s = new string(cPtr); }Console.WriteLine(s);//abcs = new string(c[1], 5);Console.WriteLine(s);//bbbbbConsole.ReadKey();}


?? ?
?? ?2、屬性
?? ? ? Char[] ?字串中某索引的char值
?? ? ? length ?字串的長(zhǎng)度

?? ??? ?string s = "abc";Console.WriteLine($"{s[0]},{s.Length}");//a,3


?? ? ??
?? ?3、String運(yùn)算符
?? ? ? == ?是否相等,
?? ? ? != ?是否不相等
?? ? ? + ? 連接,只要有一個(gè)是字串,按連接處理

?? ??? ?string s1 = "abc", s2 = new string(new char[] { 'A', 'B', 'C' });Console.WriteLine("{0},{1}", string.Equals(s1, s2), s1 != s2);


?? ? ??
?? ?4、換行
?? ? ? 在字串輸出中,可用轉(zhuǎn)義符\n表示換行。
?? ? ? 在代碼輸出中,只要不遇見(jiàn)分號(hào)或語(yǔ)塊結(jié)束,默認(rèn)是連續(xù)的。對(duì)字串可截取一部分回車后,
?? ? ? 在下一行中用+,另起剩下的字串。
?? ? ? ? ?對(duì)邏輯符,可對(duì)邏輯表達(dá)式回車后,以運(yùn)算符另起邏輯表達(dá)式

?? ??? ?Console.WriteLine("abc\nABC");//兩行輸出string s = "abc" +"ABC";//字串另起if (s == "" &&s != string.Empty) //邏輯另起{ Console.WriteLine(s); }


?? ??? ?
?? ?5、方法
?? ?1)拆分
?? ? ? split(string[] separator,int count,StringSplitOptions options)
?? ? ? ? ? ? ?用指定分隔字串和可選項(xiàng)拆分為最大數(shù)量的子字串。

?? ??? ??? ?public static void Main(string[] args){string s1 = ",ONE,,TWO,,,THREE,,";string s2 = "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]";char[] charSeparators = new char[] { ',' };string[] stringSeparators = new string[] { "[stop]" };string[] result;Show(s1.Split(charSeparators, StringSplitOptions.None));//.ONE..TWO...THREE... ?用字符數(shù)組分隔,9個(gè)元素,null保留Show(s1.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries));//ONE.TWO.THREE. ? ? ? ?3個(gè)元素,null剔除Show(s2.Split(stringSeparators, StringSplitOptions.None));//.ONE..TWO...THREE... ?用字串?dāng)?shù)組分隔,9個(gè)元素,null保留Show(s2.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries));//ONE.TWO.THREE. ? ? ? ?3個(gè)元素,null剔除Show(s2.Split(stringSeparators, 2, StringSplitOptions.None));//.ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]. 2個(gè)元素,第一個(gè)空Show(s2.Split(stringSeparators, 2, StringSplitOptions.RemoveEmptyEntries));//ONE.TWO[stop][stop][stop]THREE[stop][stop]. ? ? ? ? ? ? 2個(gè)元素,剔除nullShow(s2.Split(stringSeparators, 7, StringSplitOptions.RemoveEmptyEntries));//ONE.TWO.THREE. ? ? ? ? ? ? ? 超個(gè)本身仍按本身最多元素算,3個(gè)元素,剔除nullConsole.ReadKey();}public static void Show(string[] strings){foreach (string s in strings) { Console.Write(s + "."); }Console.WriteLine();}


?? ??? ?注:split方法忽略分割符為null和""的情況。
?? ??? ? ? 匹配規(guī)則:實(shí)例中遇到的子串優(yōu)于分割元素的順序。
?? ??? ? ? 即實(shí)例從頭開(kāi)始向后取子串分割符從索引0開(kāi)始匹配,不符合,索引增加;
?? ??? ? ? 符合繼續(xù)子串后擴(kuò),直到完全匹配。
?? ??? ? ? 1.字串"abcdef",分割符{"ef","bcde"},結(jié)果{"a","f"}
?? ??? ? ? ? 后擴(kuò)至abcde時(shí),分割索引0不匹配,增加索引為1即bcde,匹配。結(jié)果a與f.
?? ??? ? ? 2.上例分割符為{"bcd","bc"},結(jié)果{"a","def"}
?? ??? ? ? ? 擴(kuò)至ab時(shí),索引0有b相同(索引1排不上號(hào)),繼續(xù)abc,索引0仍有相同(索引1
?? ??? ??? ? 仍然排不上號(hào)),繼續(xù)abcd時(shí),索引0完全匹配,結(jié)果a與ef
?? ??? ? ? 3.上例分割符為{"bc","bcd"},結(jié)果{"a","def"}
?? ??? ??? ? 擴(kuò)至ab,索引0有b相同(同理索引1吃灰),擴(kuò)至abc時(shí),索引0完全匹配,結(jié)果
?? ??? ??? ? 為a和def。
?? ??? ? ? 4.上例分割符{"cd","c","bce"},結(jié)果{"ab","ef"}
?? ??? ? ? ? 擴(kuò)至ab時(shí),索引0與1吃灰,索引2有b上位,繼續(xù)后擴(kuò)abcd,索引2不符。回頭
?? ??? ??? ? 繼續(xù)用索引0與1,兩者都上位,但索引前位0優(yōu)先,cd匹配,結(jié)果ab與ef
?? ??? ? ? 5.上例分割符{"c","cd","bce"},結(jié)果{"ab","def"}
?? ??? ? ? ? 繼4分析,到abcd時(shí),索引2吃灰,返回索引0上位,符合,結(jié)果ab與def
?? ??? ? ? 6.上例分割符{"d","cde","b","bcdd"} 結(jié)果為a,null,f
?? ??? ? ? ? 到ab時(shí),索引2上位,匹配,分成a與cdef;繼續(xù)匹配(a就不分析了),cdef從頭
?? ??? ??? ? 開(kāi)始,c時(shí)只有索引1上位,繼續(xù)cd,索引1仍然上位(子串優(yōu)先索引所以索引0只
?? ??? ??? ? 能干看),cde時(shí)索引1完全匹配,于是結(jié)果是a,null,f. 共三個(gè)元素。
?? ? ? ?總結(jié):子串先上位則占位,不符時(shí),再索引依次占位。索引優(yōu)先級(jí)最低。
?? ??? ? ? ? ?只要有符合部分,哪怕后面的索引也將占位.

? ? ? ? public static void Main(string[] args){string s = "abcdef";string[] separator1 = { "b", "bcd" };//1string[] separator2 = { "bcd", "b" };//2string[] separator3 = { "bc", "bcd" };//3string[] separator4 = { "bcde", "bc" };//4string[] separator5 = { "d", "bcd" };//5string[] separator6 = { "bcd", "d" };//6string[] separator7 = { "c", "cd", "bce" };//7string[] separator8 = { "d", "cde", "bcdd", "b" };//8Console.WriteLine("------------1-2");Show(s.Split(separator1, StringSplitOptions.None));//a^cdef^2Show(s.Split(separator2, StringSplitOptions.None));//a^ef^2Console.WriteLine("------------3-4");Show(s.Split(separator3, StringSplitOptions.None));//a^def^2Show(s.Split(separator4, StringSplitOptions.None));//a^f^2Console.WriteLine("------------5-6");Show(s.Split(separator5, StringSplitOptions.None));//a^ef^2Show(s.Split(separator6, StringSplitOptions.None));//a^ef^2Console.WriteLine("------------7-8");Show(s.Split(separator7, StringSplitOptions.None));//ab^def^2Show(s.Split(separator8, StringSplitOptions.None));//a^^f^3Console.ReadKey();}public static void Show(string[] strings){foreach (string s in strings) { Console.Write(s + "^"); }Console.WriteLine(strings.Length);}


?? ?
?? ??? ?split(char[] separator,int count,StringSplitOptions options)
?? ??? ? ? ? ? ?用指定分隔字符和可選項(xiàng)拆分最大數(shù)量count的子字符串
?? ??? ?split(string[] separator,StringSplitOptions options)
?? ??? ?split(char[] separator,StringSplitOptions options)
?? ? ? ?split(params char[] separator) 用指定分隔字符拆分
?? ??? ?
?? ?2)大小寫副本
?? ??? ?ToUpper() ?返回字串轉(zhuǎn)為大寫的副本
?? ??? ?ToLower() ?............小........
?? ??? ?
?? ?3)判斷開(kāi)始或結(jié)尾
?? ??? ?StartsWith(string value) ?判斷開(kāi)始是否為指定字串,返回bool
?? ??? ?EndsWith(string value) ? ?....結(jié)尾..........
?? ??? ?
?? ??? ?StartsWith(string value,StringComparison comparisonType)
?? ??? ? ? ? 判斷開(kāi)始,選項(xiàng)忽略大小寫用得多OrdinallgnoreCase
?? ??? ?EndsWith(string value,StringComparison comparisonType)
?? ??? ? ? ? 判斷結(jié)尾,選項(xiàng)忽略大小寫用得多OrdinallgnoreCase
?? ?
?? ?4)刪除前后匹配符
?? ??? ?Trim() ? ? ?刪除前后空白符
?? ??? ?TrimEnd() ? 刪除末尾空白符
?? ??? ?TimeStart() ....開(kāi)始.....
?? ??? ?
?? ??? ?Trim(parms char[] trimChars) ? ? ?刪除前后指定字符
?? ??? ?TrimEnd(parms char[] trimChars) ? ....結(jié)尾..
?? ??? ?TrimStart(parms char[] trimChars) ....開(kāi)始..
?? ??? ?
?? ?5)子串,轉(zhuǎn)換?? ?
?? ??? ?Substring(int startIndex) 指定位置到字串末尾(索引從0開(kāi)始)索引大于長(zhǎng)度或小于零異常
?? ??? ?Substring(int startIndex,int length) 指定位置開(kāi)始到指定長(zhǎng)度

?? ??? ?string s="abcdef";s.Substring(2);//cdefs.Substring(2,2);//cd


?? ??? ?
?? ??? ?ToCharArray() ? ? ? 將此實(shí)例的字符串復(fù)制到Unicode字符數(shù)組。返回Char[]
?? ??? ? ? ? ? ? ? ? ?逆方法:若字符數(shù)組->字串:用構(gòu)造函數(shù)String(Char[])
?? ??? ?ToCharArray(int startIndex,int length) 類上,指定起始和長(zhǎng)度復(fù)制到Char[]

? ??? ?string s="abcdef";char[] c=s.ToCharArray();//{'a','b','c','d','e','f'}char[] c1=s.ToCharArray(4,2);//{'e','f'}


?? ??? ?
?? ??? ?ToString() ? 轉(zhuǎn)換為String,不執(zhí)行實(shí)際轉(zhuǎn)換。引用類型一般返回類型

?? ??? ?int a = 3; double b = 2.3;Stopwatch sw = new Stopwatch();Console.WriteLine($"{a.ToString()},{b.ToString()},{sw.ToString()}");//3,2.3,System.Diagnostics.Stopwatch 上面轉(zhuǎn)換可省,會(huì)自動(dòng)轉(zhuǎn)string


?? ??? ?
?? ?6)替換
?? ??? ?Replace(char oldChar,char newChar) 用新字符替換老字符,返回一新string
?? ??? ?Replace(string oldValue,string newValue) 用新串替換老串,返回一新串
?? ??? ?注:返回是新串,原串未發(fā)生改變;區(qū)分大小寫。可連續(xù)調(diào)用鏈接一起,實(shí)現(xiàn)多次替換

?? ??? ?string s = "abcdef";string s1 = s.Replace('a', 'b').Replace('d', 'w');//bbcwefstring s2 = s.Replace("d", "e").Replace("f", "g");//abceeg


?? ??? ?
?? ?7)刪除
?? ??? ?Remove(int startIndex,int count) 刪除從起始到指定長(zhǎng)度的字串,返回新串,原串未變.
?? ??? ?Remove(int startIndex) ? ? ? ? ? 刪除從起始到末尾的字串。

?? ??? ?string s = "abcdef";string s1 = s.Remove(2);//abstring s2 = s.Remove(2, 2);//abef


?? ??? ?
?? ?8)填充
?? ??? ?PadLeft(int totalWidth) ? ? ? 左側(cè)填充空格,使新串總長(zhǎng)為totalWidth,實(shí)現(xiàn)右對(duì)齊
?? ??? ?PadLeft(int totalWidth,char paddingChar) ? ? ? 左側(cè)用指定字符填充,實(shí)現(xiàn)右對(duì)齊
?? ??? ?PadRight(int taotalWidth) ? ? 右側(cè)填充空格.............................左對(duì)齊
?? ??? ?PadRight(int totalWidth,char paddingChar) ? ? ? 右側(cè)...

?? ??? ?string s = "ab";string s1 = s.PadLeft(5); ? ? // ? abstring s2 = s.PadLeft(5, 'z');//zzzabstring s3 = s.PadRight(5); ? ?//ab ?

?
?? ?
?? ?9)查找索引
?? ??? ?IndexOf(string value,int startIndex,int count,StringComparison comparisonType)
?? ??? ? ? value要搜索的字串,startIndex搜索起始位置,count起始往后長(zhǎng)度,末參是否區(qū)別大小
?? ??? ?IndexOf(string value,int startIndex,StringComparison comparisonType)
?? ??? ? ? ? ? ? ? ?搜索起始到末尾
?? ??? ?
?? ??? ?IndexOf(string value,int startIndex,int count) ?指定起始、位置
?? ??? ?IndexOf(char value,int startIdex,int count)?
?? ??? ?
?? ??? ?IndexOf(string value,StringComparison comparisonType) 是否區(qū)分大小寫(字符不需要)
?? ??? ??? ??? ?
?? ??? ?IndexOf(string value,int startIdex) ? ?指定起始到末尾
?? ??? ?IndexOf(char value,int starIdex) ? ? ? ? ??
?? ??? ?
?? ??? ?IndexOf(string value) ? ? ? ? ? ? ? ? ?搜索整個(gè)
?? ??? ?IndexOf(char value) ? ? ? ? ? ? ? ? ? ? ?

?? ??? ?string s = "abAbefgta"; int n;n = s.IndexOf("a", 1, 2, StringComparison.OrdinalIgnoreCase);//2n = s.IndexOf("a", 1, 2, StringComparison.Ordinal);//-1n = s.IndexOf('a', 4, 2);//-1n = s.IndexOf('a', 4, 5);//8 ?5改成6時(shí)會(huì)異常,索引超限


?? ??? ?
?? ??? ?類似上面是找第一個(gè)匹配項(xiàng),下面是搜索最后一個(gè)匹配項(xiàng).
?? ??? ?LastIndexOf(string value,int startIdex,int count,StringComparison comparisonType)
?? ??? ? ? ? ? ? ?count是從startIndex從右往左的字符數(shù),超限會(huì)異常
?? ??? ?LastIndexOf(string value,int startIndex,Stringcomparison comparisonType)?
?? ??? ? ? ? ? ? ?指定起始從右往左到起始
?? ??? ??? ??? ? ?
?? ??? ?LastIndexOf(string value,int startIndex,int count)
?? ??? ?LastIndexOf(char value,int startIndex,int count)
?? ??? ?
?? ??? ?LastIndexOf(string value,int startIndex)
?? ??? ?LastIndexOf(char value,int startIdex)
?? ??? ?
?? ??? ?LastIndexOf(string value)
?? ??? ?LastIndexOf(char value)
?? ??? ?
?? ??? ?LastIndexOf(string vlaue,StringComparison comparisonType)

?? ??? ?string s = "abAabefagta"; int n = 0;//"a",1,3 時(shí)會(huì)異常,起始索引1從右往左3個(gè)字符超出數(shù)組限制n = s.LastIndexOf("a", 3, 3, StringComparison.OrdinalIgnoreCase);//3n = s.LastIndexOf("A", 3, 3, StringComparison.Ordinal);//2n = s.LastIndexOf('a', 10, 4);//10n = s.LastIndexOf('a', 9);//7n = s.LastIndexOf("a");//10


?? ??? ?
?? ??? ?=========多個(gè)查找,多個(gè)字符數(shù)組去查找,返回第一個(gè)匹配項(xiàng)
?? ??? ?IndexOfAyn(char[] anyof,int startIndex,int count) 指定起始、位置
?? ??? ?IndexOfAny(char[] anyof,int startIndex) ?
?? ??? ?IndexOfAny(char[] anyof) ? anyof數(shù)組中只要有一個(gè)匹配立即返回當(dāng)前索引
?? ??? ?
?? ??? ?LastIndexOfAny(char[] anyof,int startIndex,int count)
?? ??? ?LastIndexOfAny(char[] anyof,int startIndex)
?? ??? ?LastIndexOfAny(char[] anyof)

?? ??? ?string s = "abcdeef";char[] c = { 'e', 'f', 'c' };Console.WriteLine(s.IndexOfAny(c));//2 其中c先匹配//4改成3,會(huì)因5向字串前面位置超限引發(fā)異常Console.WriteLine(s.LastIndexOfAny(c, 4, 5));//2 e先匹配


?? ??? ?
?? ?10)分割式連接
?? ??? ?String.Join(string separator,System.collection.Generic.IEnumerable<string> values)
?? ??? ? ? ? ? ? 串連集合values各成員,僅在成員間用指定分隔符
?? ??? ??? ??? ??
?? ??? ?String.Join(string separator,params object[] values) 所有元素
?? ??? ?String.Join(string separator,params string[] value)
?? ??? ?
?? ??? ?String.Join(string separator,string[] value,int startIndex,int count) 指定元素
?? ??? ?
?? ??? ?String.Join<T>(string separator,System.Collections.Generic.IEnumerable<t> values)

?? ??? ?string[] s = { "a", "b", "c", "d" };List<int> lst = new List<int>() { 1, 2, 3, 4 };//注意是成員之間,首部與末尾都沒(méi)有分割符^Console.WriteLine(string.Join("^", s));//a^b^c^dConsole.WriteLine(string.Join("^", lst));//1^2^3^ 4Console.WriteLine(string.Join("^", 'a', 'b', 'c'));//a^b^cConsole.WriteLine(string.Join("^", s, 1, 2));//b^c


?? ??? ?
?? ??? ?注意:1.被連接成員會(huì)隱式轉(zhuǎn)為字符串;
?? ??? ? ? ? ?2.若連接第一個(gè)成員為null時(shí),將不會(huì)連接各成員。第一元素應(yīng)處理成Empty方可執(zhí)行;
?? ??? ??? ? ?3.若分隔符為null或除第一元素外其余為null,將以String.Empty代替。
?? ?
?? ?11)連接(+)
?? ??? ?String.Concat(System.Collections.Generic.IEnumerable<string> values)
?? ??? ? ? ? ? ? ? ? ? ? ? 各成員串聯(lián)(不加分隔符),若成員為null則視為String.Empty處理
?? ??? ?String.Concat(string str0,string str1,string str2,string str3) 四個(gè)相加
?? ??? ?String.Concat(string str0,string str1,string str2) 三個(gè)相加
?? ??? ?String.Concat(string str0,string str1)
?? ??? ?
?? ??? ?String.Concat(object arg0,object arg1,object arg2,object arg3) 隱式轉(zhuǎn)換成string相連
?? ??? ?String.Concat(object arg0,object arg1,object arg2) ? ? ??
?? ??? ?String.Concat(object arg0,object arg1)
?? ??? ?
?? ??? ?String.Concat(params string[] values) ? 成員有null時(shí)自動(dòng)用String.Empty替換
?? ??? ?String.Concat(params object[] args)
?? ??? ?String.Concat<T>(System.Collections.Generic.IEnumerable<T> values) 成員相連
?? ??? ?
?? ??? ?String.Concat(object arg0) ? ?實(shí)際調(diào)用ToString()
?? ??? ?
?? ??? ?
?? ?12)是否相等bool
?? ??? ?Equals(string value,StringComparison comparisonType) ?是否相等,返回bool、
?? ??? ?String.Equals(string a,string b,StringComparison comparisonType)
?? ??? ?String.Equals(string a,string b)
?? ??? ?
?? ??? ?Equals(object obj) ? ?obj隱式可轉(zhuǎn)字串
?? ??? ?Equals(string value)
?? ?
?? ?13)插入
?? ??? ?Insert(int startIndex,string value) 指定索引位置插入指定字串,返回新字串.
?? ??? ? ? ? ? ? ? ? ? ?指定索引最大可為原索引+1

?? ??? ?string s = "abcd";Console.WriteLine(s.Insert(3, "z"));//abczdConsole.WriteLine(s.Insert(4, "z"));//abcdz 4改5異常


?? ?
?? ?14)拘留池(暫存池、緩沖池、暫存池)the intern pool
?? ? ? 因?yàn)樽址遣豢勺兊?#xff0c;所以CLR(CLR是公共語(yǔ)言運(yùn)行時(shí),Common Language Runtime)可能會(huì)
?? ? ? 將相同值的字符串用同一個(gè)實(shí)例。程序中大量使用字符串,有不少是重復(fù)性的,為了降低內(nèi)存
?? ? ? 占用,.Net將代碼中聲明的字符串放到字符串拘留池中,值相同的字符串共享同一個(gè)實(shí)例。字
?? ? ? 符串是不變的。不是所有字符串都在拘留池中,.Net會(huì)判斷哪些該放。
?? ??? ?
?? ??? ?通用語(yǔ)言運(yùn)行時(shí)通過(guò)維護(hù)一個(gè)被稱為拘留池的表來(lái)節(jié)約字符串的存儲(chǔ),該表包含對(duì)程序中
?? ??? ?以編程方式聲明或創(chuàng)建的每個(gè)獨(dú)特字面字符串的單一引用。因此,一個(gè)具有特定值的字面字
?? ??? ?符串的實(shí)例在系統(tǒng)中只存在一次。故多個(gè)字面字符串會(huì)指向同一實(shí)例以節(jié)約內(nèi)存。
?? ??? ?
?? ??? ?當(dāng)給一個(gè)變量分配字符串的時(shí)候,CLR先到駐留池里找,如果找到了,就將該字符串的引用
?? ??? ?給這個(gè)變量,如果沒(méi)有,就將該字符串創(chuàng)建到駐留池里,然后在將引用給該變量。
?? ??? ?
?? ??? ?動(dòng)態(tài)字符串默認(rèn)是不在字符串拘留池中的。

?? ??? ?string s1 = "拘留池", s2 = "拘留池";Console.WriteLine("{0},{1}", s1 == s2, ReferenceEquals(s1, s2));//T Tstring s3 = "abc", s4 = new string(s3.ToCharArray());Console.WriteLine("{0},{1}", s3 == s4, ReferenceEquals(s3, s4));//T Fstring s5 = "abc", s6 = "ab" + "c";//字面符,為靜態(tài),進(jìn)入拘留池查找Console.WriteLine("{0},{1}", s5 == s6, ReferenceEquals(s5, s6));//T T//string s7 = Console.ReadLine();//輸入abc ?為動(dòng)態(tài)不進(jìn)入拘留池//Console.WriteLine("{0},{1}", s5 == s7, ReferenceEquals(s5, s7));//T Fstring s8 = new string("abc".ToCharArray());Console.WriteLine("{0},{1}", s5 == s8, ReferenceEquals(s5, s8));//T Fstring s9 = (new StringBuilder("abc")).ToString();Console.WriteLine("{0},{1}", s5 == s9, ReferenceEquals(s5, s9));//T Fstring a = "a", b = "b", c = "c", d = a + b + c;//d產(chǎn)生了ab與abc兩個(gè)//+連接是新開(kāi)辟空間,所以地址是不一樣的Console.WriteLine("{0},{1}", s5 == d, ReferenceEquals(s5, d));//T F


?? ??? ?
?? ?15)添加拘留池
?? ??? ?String.Intern(string str) 在拘留池搜索str,若有返回引用,若無(wú)添加入池再返回引用
?? ??? ?String.IsIntern(string str) ?檢測(cè)str是否在池,在返回引用,無(wú)返回null.

? ? ? ? ? ? string s1 = "MyTest";string s2 = new StringBuilder().Append("My").Append("Test").ToString();string s3 = string.Intern(s1);//檢測(cè)s1,入池并返回引用. s1與s3同引用Console.WriteLine(ReferenceEquals(s1, s2));//FalseConsole.WriteLine(ReferenceEquals(s1, s3));//True


?? ?
?? ?16)GetEnumerator取得
?? ??? ?CharEnumerator GetEnumerator() ? ?String.GetEnumerator由字串構(gòu)造字符枚舉器

? ? ? ? ? ? string s = "The Example Of String.GetEnumerator";CharEnumerator ce = s.GetEnumerator(); //取得字符枚舉器對(duì)象while (ce.MoveNext())//索引起始位于第一個(gè)之前,移動(dòng)成功True{//索引若超出最后一個(gè)字符,則不會(huì)更改索引,移動(dòng)失敗返回falseif (char.IsUpper(ce.Current)) Console.Write(ce.Current);else Console.Write(char.ToUpper(ce.Current));}

THE EXAMPLE OF STRING.GETENUMERATOR
?? ??? ?
?? ?17)字串比較
?? ??? ?String.Compare(string strA,int indexA,string strB,int indexB,int length,
?? ??? ? ? ? ? ? ? ? ? System.Globlization.CultureInfo culture,
?? ??? ??? ??? ??? ? ? System.Globlization.CompareOptions options)
?? ??? ??? ? ? ? ? ?字串strA與strB分別從各自的起始位置開(kāi)始比較長(zhǎng)度間字符。
?? ??? ??? ??? ??? ?culture為指定區(qū)域,若為null則使用當(dāng)前區(qū)域。
?? ??? ??? ??? ??? ?CompareOptions指定比較項(xiàng),如忽略大小寫,符號(hào)
?? ??? ? ? ?返回:<0,strA在strB前;0,相同或length=0;>0,strA在strB之后.
?? ??? ?String.Compare(string strA,int indexA,string strB,int indexB,int length,
?? ??? ? ? ? ? ? ? ? ? bool ignoreCase,
?? ??? ??? ??? ??? ? ? System.Globalization.CultureInfo culture)
?? ??? ?String.Compare(string strA,int indexA,string strB,int indexB,int length,
?? ??? ??? ? ? ? ? ? ? StringComparison comparisonType)
?? ??? ?String.Compare(string strA,int indexA,string strB,int indexB,int length,
?? ??? ? ? ? ? ? ? ? ? bool ignoreCase)
?? ??? ?String.Compare(string strA,int indexA,string strB,int indexB,int length)
?? ??? ?
?? ??? ?String.Compare(string strA,string strB,
?? ??? ? ? ? ? ? ? ? ? System.Globalization.CultureInfo culture,
?? ??? ??? ??? ??? ? ? System.Globalization.CompareOptions options)
?? ??? ?String.Compare(string strA,string strB,bool ignorCase,
?? ??? ? ? ? ? ? ? ? ? System.Globalization.CultureInfo culture)
?? ??? ?String.Compare(string strA,string strB,StringComparision comparsionType)
?? ??? ?String.Compare(string strA,string strB,bool ignoreCase)
?? ??? ?String.Compare(string strA,string strB)

?? ??? ?string s1 = "Jack Smith", s2 = "JAcn Doe";CompareOptions co=CompareOptoins.IgnoreCase;string.Compare(s1, 0, s2, 0, 1, new CultureInfo("en-Us"), co);//0string.Compare(s1, 0, s2, 0, 2, new CultureInfo("en-Us"), co);//0string.Compare(s1, 0, s2, 0, 3, new CultureInfo("en-Us"), co);//0string.Compare(s1, 0, s2, 0, 4, new CultureInfo("en-Us"), co);//-1?? 

?
?

?? ??? ?string a = "hello";string b = "h";b += "ello";Console.WriteLine(a == b);//true 值是否相等Console.WriteLine(string.ReferenceEquals(a, b));//false 實(shí)例是否相同

?? ??? ?string s = "abdicdkadkeaekda";int index = 0, index1 = 0;while (index != -1){index = s.IndexOf("a", index1);if (index >= 0){Console.WriteLine(index);index1 = index + 1;}}

?? ?
?? ?

?? ??? ?string p = @"C:\a\b\c\d\e\f\abc.mp3";int index = p.LastIndexOf("\\");//最后一個(gè)\Console.WriteLine(p.Substring(index + 1));Console.ReadKey();//取文件名
?? ??? ?string[] s = { "我", "們", "是", "中", "國(guó)", "人" };string sNew = string.Join("|", s);Console.WriteLine(sNew);//我|們|是|中|國(guó)|人
?? ??? ?string s = "abc";char[] c = s.ToCharArray();Array.Reverse(c);s = new string(c);Console.WriteLine(s);
?? ??? ?Console.WriteLine("輸入一段英文句子:");string s = Console.ReadLine();string[] s1 = s.Split(new char[] { ' ', '.', ',' }, StringSplitOptions.RemoveEmptyEntries);Array.Reverse(s1);Console.WriteLine(string.Join(" ", s1));
?? ??? ?string s = "abc@163.com";int index = s.IndexOf('@');Console.WriteLine(s.Substring(0, index - 1));Console.WriteLine(s.Substring(index + 1));



?? ?

?? ?
六、指針


?? ?指針類型聲明:
?? ??? ?type* ?identifier;
?? ? ? ?void* ?identifier;//允許,但不推薦。因未說(shuō)明具體指針類型

?? ? ? int* ?p1,p2,p3;//正確,三個(gè)指針int ?*p1,p2,p3;//錯(cuò)誤,只能按語(yǔ)法int*


?? ? ??
?? ? 指針不能用于引用類型,一般用于值類型 ?
?? ? ? int* ?p;//指向整數(shù)的指針--------*p表示由int中指針找到指向的值
?? ? ? int** p;//指向整數(shù)的指針的指針
?? ? ? int*[] p;//指向整數(shù)的指數(shù)的一維數(shù)組
?? ? ? char* p;//指向字符的指針
?? ? ? void* p;//指向未知類型的指針
?? ?
?? ?指針運(yùn)算:
?? ?* ? ?執(zhí)行指針間尋址 ? ? ?a=*&a
?? ?-> ? 通過(guò)指針訪問(wèn)結(jié)構(gòu)的成員. ? x->y等同(*x).y
?? ?[] ? 為指針建立索引
?? ?& ? ?獲取變量的地址
?? ?++和-- ?遞增/減指針
?? ?+/- ? 執(zhí)行指針?biāo)惴?br /> ?? ?==,!=,>,>=,<,<= ? 比較指針
?? ?stackalloc ? ?在堆棧上分配內(nèi)存
?? ?
?? ?fixed語(yǔ)句
?? ? ?防止GC重新定位可移動(dòng)變量,并聲明指向該變量的指針。固定變量的地址在語(yǔ)句的
?? ?持續(xù)時(shí)間內(nèi)不會(huì)更改。
?? ? ?只能在相應(yīng)的fixed語(yǔ)句中使用聲明的指針。聲明的指針是只讀,不可修改。
?? ? ?只能在unsafe上下文中使用fixed語(yǔ)句。

?? ? ?fixed保證GC在語(yǔ)句主體執(zhí)行期間不會(huì)重新定位或釋放包含對(duì)象實(shí)例。
?

?? ??? ?unsafe{int[] n = { 10, 20, 30 };int* p;fixed (int* first = &n[0], last = &n[2]){//連續(xù)8字節(jié),即2個(gè)int32(4字節(jié))Console.WriteLine((int)last - (int)first);//8p = first + 1;//指針移動(dòng)1個(gè)int,即4位,指向n[1]Console.WriteLine(*last - *p);//10}//fixed內(nèi)定義的指針不可更改}

?? ?
七、繼承


?? ? ?開(kāi)發(fā)中,每一個(gè)類應(yīng)單獨(dú)寫在一個(gè)文件中,不能混合.
?? ? ?把多個(gè)類中重復(fù)的成員封裝成單獨(dú)的一個(gè)類,作為這些類的父類或基類,以解決代碼冗余。
?? ?這幾類稱為父類的子類或派生類。
?? ? ?子類繼承于父類public的屬性與方法。不繼續(xù)私有成員private.
?? ? ?C#中,所有類直接或間接繼承了object類。若沒(méi)寫繼承,那它就繼承object。
?? ? ?
?? ? ?子類有沒(méi)有繼承父類的構(gòu)造函數(shù)????
?? ? ?子類不能繼承父類的構(gòu)造函數(shù)。但是,父類必須要有無(wú)參的構(gòu)造函數(shù),因?yàn)樽宇悩?gòu)造之前
?? ?先要構(gòu)造父類(即創(chuàng)建子類對(duì)象之前,其內(nèi)部先要?jiǎng)?chuàng)建一個(gè)父類對(duì)象,以便子類繼承它的成員)
?? ? ? 當(dāng)父類創(chuàng)建有參構(gòu)造函數(shù)后,無(wú)參構(gòu)造函數(shù)消失。子類默認(rèn)調(diào)用父類的無(wú)參函數(shù)來(lái)創(chuàng)建父
?? ?類對(duì)象,以便子類繼承父類中的成員。此時(shí),若父類消失了無(wú)參構(gòu)造函數(shù),會(huì)引發(fā)子類錯(cuò)誤。
?? ?解決辦法:
?? ? ? 1)在父類中手動(dòng)重新寫一個(gè)無(wú)參的構(gòu)造函數(shù),以便子類調(diào)用。
?? ? ? 2)在子類的構(gòu)造函數(shù)中顯式調(diào)用父類的構(gòu)造函數(shù)。
?? ? ? 在子類構(gòu)造函數(shù)的后面用:base(參數(shù)表) ? 來(lái)調(diào)用父類的構(gòu)造函數(shù)
?? ?

八、繼承的特性


?? ?1.繼承的單根性:一個(gè)子類只能有一個(gè)父類(基類)。
?? ?2.繼承的傳遞性
?? ?

?? ?
九、New關(guān)鍵字


?? ?1)創(chuàng)建新對(duì)象;
?? ?2)隱藏從父類那里繼承過(guò)來(lái)的成員。
?? ?
?? ?若子類有成員與父類成員相同,子類會(huì)隱藏父類的這個(gè)成員,即只能調(diào)用同名的子類成員。
?? ?此時(shí)vs會(huì)提示警告,若是故意隱藏,添加new表示意圖后,警告消失。
?? ?

? ? public class Person //基類{private string _name; private int _age; private char _gender;public string Name{ get { return _name; } set { _name = value; } }public int Age{ get { return _age; } set { _age = value; } }public char Gender{ get { return _gender; } set { _gender = value; } }public Person(string name, int age, char gender){ Name = name; Age = age; Gender = gender; }public void SayHello(){ Console.WriteLine("基類同名時(shí),被子類隱藏"); }}public class Student : Person //繼承{private double _worktime;public double Worktime{ get { return _worktime; } set { _worktime = value; } }public Student(double worktime, string name, int age, char gender) : base(name, age, gender){ Worktime = worktime; }//用base調(diào)用基類構(gòu)造函數(shù)public new void SayHello() //不加new不出錯(cuò),但會(huì)有警告{ Console.WriteLine("我叫{0},我年齡是{1},我是一名{2}生,工作年限{3}。", Name, Age, Gender, Worktime); }}


?? ?
?? ?根據(jù)上面,Studendt繼承于Person:

? ? ? ? ? ? Student s = new Student(3, "孫全", 33, '男');s.SayHello();

http://www.risenshineclean.com/news/54592.html

相關(guān)文章:

  • 做外貿(mào)的要有自己的網(wǎng)站嗎網(wǎng)絡(luò)營(yíng)銷渠道可分為
  • 企業(yè)網(wǎng)站的常見(jiàn)服務(wù)直通車關(guān)鍵詞優(yōu)化
  • 廣州網(wǎng)站備案拍照南京網(wǎng)站推廣公司
  • 網(wǎng)頁(yè)和網(wǎng)站做哪個(gè)好用嗎個(gè)人如何優(yōu)化網(wǎng)站有哪些方法
  • joomla與wordpress學(xué)哪個(gè)好企業(yè)seo網(wǎng)站營(yíng)銷推廣
  • 建設(shè)網(wǎng)站 懷疑對(duì)方傳銷 網(wǎng)站制作 緩刑在線網(wǎng)頁(yè)編輯平臺(tái)
  • 建設(shè)一個(gè)電子商務(wù)網(wǎng)站seo 優(yōu)化公司
  • 做視頻怎么去除網(wǎng)站泉州排名推廣
  • WordPress關(guān)站插件廣州今天新聞
  • 做it公司網(wǎng)站站長(zhǎng)域名查詢工具
  • 政府網(wǎng)站建設(shè)整改情況汕頭網(wǎng)絡(luò)營(yíng)銷公司
  • b2c網(wǎng)站代表和網(wǎng)址做銷售最掙錢的10個(gè)行業(yè)
  • 豐胸個(gè)人網(wǎng)站建設(shè)上海優(yōu)化網(wǎng)站公司哪家好
  • 英文自助建站排行榜哪個(gè)網(wǎng)站最好
  • 怎么做網(wǎng)站開(kāi)發(fā)的方案線上營(yíng)銷推廣方式
  • wordpress電腦安裝教程網(wǎng)站seo優(yōu)化報(bào)告
  • 揚(yáng)州網(wǎng)站建設(shè)網(wǎng)絡(luò)營(yíng)銷的方法
  • 科技公司網(wǎng)站源碼企業(yè)網(wǎng)站的優(yōu)化建議
  • 只用django做網(wǎng)站友情鏈接購(gòu)買平臺(tái)
  • 專做網(wǎng)站的公司免費(fèi)網(wǎng)站制作
  • wordpress自定義模塊鄭州粒米seo外包
  • 免費(fèi)搭建網(wǎng)站模板淘寶客怎么做推廣
  • 網(wǎng)上電商教程seo優(yōu)化招聘
  • 阿里云從哪里建設(shè)網(wǎng)站交換友情鏈接的渠道有哪些
  • 備案期間網(wǎng)站要關(guān)閉嗎seo優(yōu)化查詢
  • 服裝網(wǎng)站建設(shè)任務(wù)表網(wǎng)站推廣和優(yōu)化系統(tǒng)
  • 畢設(shè)什么類型網(wǎng)站容易做國(guó)外廣告聯(lián)盟平臺(tái)
  • 貨架 網(wǎng)站建設(shè) 牛商網(wǎng)友情鏈接圖片
  • 專業(yè)簡(jiǎn)章佛山seo優(yōu)化外包
  • wordpress主頁(yè)百度seo營(yíng)銷