C#基礎語法補充
[學習筆記]前接:https://www.cnblogs.com/aland-1415/p/7360509.html
一、異常處理
1、格式
try{ } catch{ } catch{ } ... finally{ } 拋出異常: Catch(Exception e){ ... Throw e; }
2、C#中的異常類主要直接或間接地派生於System.Exception類的。
System.ApplicationException 支持由應用程序生成的異常; System.SystemException 所有預定義的系統異常基類,包含以下所有的類: System.IO.IOException I/O異常; System.IndexOutOfRangeException 方法指向超出範圍的數組索引時生成的錯誤; System.ArrayTypeMismatchException 數組類型不匹配異常; System.NullReferenceException 處理依從一個空對象時生成的錯誤; System.DivideByZeroException 處理當除以0時生成的錯誤; System.InvalidCastException 處理類型轉換期間生成的錯誤; System.OutOfMemoryException 處理空閑內存不足錯誤; System.StackOverflowException 處理棧溢出生成的錯誤;
二、文件的讀寫:
1、一般文件讀寫
FileStream<object_name>=newFileStream(<fileName>,<FileMode Enumerator>,<FileAccess Enumerator>,<FileShare Enumerator>);
FileMode 參數有Append,Create,CreateNew(如果文件存在則拋異常),Open(如果文件不存在則拋異常),OpenOrCreate,Truncate(文件不存在拋異常,打開文件會重新寫入,但會保留文件的初始創建日期);
FileAccess 參數有Read,ReadWrite,Write;
FileShare 參數有Inheritable,None,Read,ReadWrite,Write,Delete;
2、System.IO 命名空間中常用非抽象類:
BinaryReader 二進制流讀取數據;
BinaryWriter 二進抽格式寫入數據;
BufferedStream 字節流的臨時存儲;
Directory 有助於操作目錄結構;
DirectoryInfo 對目錄執行操作;
DriveInfo 驅動器信息;
File 有助於處理文件;
FileInfo 對文件執行操作;
FileStream 用於對文件中任何位置的讀寫;
MemoryStream 用於隨機訪問存儲在內存中的數據流;
Path 對路徑信息執行操作;
StreamReader 從字節流中讀取字符;
StreamWriter 向一個流中寫入字符;
StringReader 讀取字符串緩沖區;
StringWriter 寫入字符串緩沖區;
3、例:
FileString fs = new FileStream("fileName",FileMode.Append,FileAccess.Write);
StreamWriter sw = new StreamWriter(fs); sw.WriteLine("Hello!"); sw.Close(); fs.Close();
三‘、正則表達式:
1、匹配規則
[character_group] 取其中一個字符,也可用-號來確定一個範圍; \w 任何單詞字符; \W 任何非單詞字符; \s 任何空白字符; \S 任何非空白字符; \d 十進制數字; \D 非十進制數字 \p{name} 與name指定的Unicode通用類別或命名塊中的任何單個字符匹配 \P{name} 與不在name指定的Unicode通用類別或命名 ^ 從字符串或一行的開頭處開始匹配,如果是在[ ] 內則表示“非” $ 從字符串或行的結尾處開始匹配; \A 匹配必須出現在字符串的開頭; \Z 匹配必須出現在字符串的末尾,用法同$; \G 匹配必須出現在上一個匹配結束的地方; \b 匹配一個單詞邊界; \B 匹配非單詞邊界; * 貪婪匹配{0,∞} + 貪婪匹配{1,∞} ? 貪婪匹配{0,1} {n} 匹配一個元素n次; {n,} 貪婪匹配一個元素n次以上; {n,m}貪婪匹配一個元素至少n次,最多m次 (以上限定符後跟一個?就表示非貪婪匹配,即盡可能少的匹配) (subexpression) 捕獲匹配子表達式,並將其分配到一個從零開始的序號中; (?<name>subexpression) 將匹配的子表達式捕獲到一個命名組中; \number 反向引用。匹配編號子表達式的值; \k<name> 命名反向引用。匹配命名表達式的值; $number 按組number替換匹配的字符串; ${name} 按命名組name匹配子字符串; $$ 替換$字符; $& 替換整個匹配項的一個副本; $` 替換匹配前的輸入字符串所有文本; $‘ 替換匹配後的輸入字符串的所有文本; $+ 替換最後捕獲的組; $_ 替換整個輸入字符串; (?imnsx-imnsx) 在模式中間對諸如不區分大小寫這樣的選項進行設置或禁用; (?#註釋) 內聯註釋;
2、Regex類(用於表示一個正則表達式);
public bool IsMatch(string input) 指示Regex構造函數中指定的正則表達式是否在指定輸入字符串中找到匹配; public bool IsMatch(string input,int startat) 指示Regex構造函數中指定的正則表達式是否在指定輸入字符串中找到匹配,從字符串中指定的開始位置開始; public static bool IsMatch(string input,string pattern) 指示指定的正則表達式是否在指定的輸入字符串中找到匹配項; public MatchCollection Matches(string input) 在指定的輸入字符串中搜索正則表達式的所有匹配項; public string Replace(string input,string replacement) 在指定輸入字符串中把所有匹配正則表達式模式的所有匹配字符串替換為指定的替換字符串; public string[] Split(string input) 把輸入字符串分割為子字符串組;
四、多線程(System.Threading.Thread)
1、System.Threading.Thread 類屬性:
CurrentContext 獲取線程正在其中執行的上下文;
CurrentCulture 獲取或設置當前線程的區域性;
CurrentPrinciple 獲取或設置線程的當前負責人;
CurrentThread 獲取當前正在運行的線程;
CurrentUICulture 獲取或設置資源管理器使用的當前區域性以便在運行時查找區域性特定資源;
ExecutionContext 獲取一個ExecutionContext對象;
IsAlive 獲取當前線程的執行狀態;
IsBackground 判斷線程是否為後臺運行;
IsThreadPoolThread 獲取一個值,該值指示線程是否屬於托管線程池
ManagedThreadld 獲取當前托管線程的唯一標識符;
Name 獲取或設置線程名稱;
Priority 獲取線程調試優先級值;
ThreadState 獲取線程當前狀態;
2、System.Threading.Thread方法:
Start() 開啟線程;
Sleep() 暫停線程;
Abort() 銷毀線程
Interrupt() 中斷處於WaitSpleepJoin線程狀態線程;
Join() 在繼續執行標準的COM和SendMessage消息處理期間,阻塞調用線程,直到某個線程終止為止;
BeginCritical
五、事件(event)
1、事件使用“發布-訂閱(publisher-subscriber)模型
發布器:是一個包含事件和委托定義的對象,事件和委托之間的聯系也定義在這個對象中。發布器類的對象調用這個事件,並通知其他對象;
訂閱器:是一個接受事件並提供事件處理程序的對象。在發布器類中委托調用訂閱器類中的方法
2、聲明事件:
public delegate void BoilerLogHandler(string status); public event BoilerLogHandler BoilerEventLog;
相當於把BoilerEventLog這個事件綁定在delegate上了,它既是一個委托BoilerEventLog(string a)也是一個事件BoilerEventLog;
六、補充內容
1、特性(Attribute)
用於在運行時傳遞各種元素的行為信息的聲明性標簽,通過放置在它所應用的元素前面的[]號來描述;
AttributeUsage
Conditional
Obsolete
2、屬性(property)
即set,get方法,且兩個方法都沒參數也沒有小括號,使可以訪問和修改private屬性;
抽象類也可以擁有抽象屬性,這些屬性在子類中應被實現;
例:
public abstract int A { set; get; }
3、索引器(indexer)
允許一個對象可以像數組一樣被索引,可以使用[]來訪問類的實例;
一維索引器語法:
elementType this[int index] { get { //返回index指定的值 } set { //設置index指定的值 } }
索引器可以被重載,且可以是不同類型的多維參數;
4、委托(delegate)
聲明委托(相當於新建一個類): delegate <return type> <delegate-name> <parameter list>;
一旦聲明了委托類型,委托對象必須使用new來創建,創建時的參數是一個具有相同類型參數和返回數據類型的方法名,然後可用這個new的名字來代替這個方法進行使用;
多播:委托對象可使用“+”運算符進行合並,但只有相同類型的委托可合並,“-”可用於從合並的委托中移除組件;多播可以完成一次調用多個方法的目的;
一個類中的多個方法可只新建一個委托對象,其他方法用“+”進行合並;
5、匿名方法
沒有名稱中有主體,匿名方法不需要指定返回類型,通過delegate關鍵字創建委托實例來聲明
delegate void NumberChange(int n); NumberChange nc = delegate(int x) //匿名委托實例 { Console.WriteLine(" "); }
6、泛型(Generic)
通過使用System.Collections.Generic後可使用泛型
使用時在類名後加一個<name>來代替一種數據類型,在要具體實例一種數據時將name換成相應的數據名即可;
泛型委托: delegate T NumberChange<T>(T x);
C#基礎語法補充