C#基礎語法補充

覆手為雲p發表於2018-07-21

[學習筆記]前接: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,∞}
?    貪婪匹配{01}
{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);

 

相關文章