using的另一種用法

2021-03-31 08:56:31 字數 2854 閱讀 6329

mail: zsc771120@yahoo.***.**

先看下面的程式碼:

using( form_arg arg=new form_arg(this.ip,this.port,this.limit) )

我以前經常使用「using system;「或者」using system.io」等加入新namespace, 上面的程式碼我沒有使用過,不知道這段程式碼是什麼意思,所以拜讀msdn,裡面有下面的解釋:

using可以取得乙個或者多個資源,執行乙個陳述式(statement),接著處置(dispose)該資源.

using(資源擷取) 內嵌陳述式

using(resourcetype resource = expression) statement

上面的解釋已經很清楚的,在using後面的括號裡面寫上資源的名字,程式處理資源裡面的程式碼之後自動清除該資源,下面是msdn的範例:

範例將建立名稱為log.txt的檔案,並將兩行文字寫入檔案內。接著,該範例就會開啟相同的檔案以讀取所包含的文字行,並將文字行複製到主控台。

using system;

using system.io;

class test

using (textreader r = file.opentext("log.txt"))

}

}

}

因為textwritertextreader類別會實作idisposable介面,因此,這項範例可以使用using陳述式以確認已經正確地關閉在寫入或讀取作業後的基礎檔案。

下面是msdn的說明:

當您撰寫使用封裝資源之物件的程式碼時,您應該確定在使用完該物件時會呼叫物件的dispose方法。您可以使用 c# 的using陳述式,或其他適用於 ***mon language runtime 的程式語言中實作 try/finally 區塊,來執行這個動作。

}}

前面含有using陳述式的程式碼,就相當於下列情形。

finally

}

}using陳述式可取得乙個或多個資源、執行一陳述式、接著處置 (dispose) 該資源。

using 陳述式:

using   (    

資源擷取   )    

內嵌陳述式

資源擷取:

區域變數宣告

表示式

資源為實作system.idisposable的類別或結構,它包含了名為dispose的單一無引數方法。使用資源的程式碼可呼叫dispose來指出該資源已不再需要。若未呼叫dispose,最後將由於記憶體**而發生自動的處置。

若資源擷取的形式為區域變數宣告,那麼區域變數宣告的型別必須為system.idisposable或可隱含轉換成system.idisposable的型別。如果資源擷取的形式為表示式,則此表示式必須為system.idisposable型別或可隱含轉換成system.idisposable型別。

宣告於資源擷取的區域變數為唯讀,並需包含乙個初始設定式。如果內嵌陳述式嘗試修改這些區域變數 (透過設定或++--運運算元),或將它們當成refout引數傳遞,就會發生編譯時期錯誤。

using陳述式將轉譯成三個部分:擷取、使用方式和處置。資源的使用方式將隱含地包含於具有finally子句的try陳述式內。此finally子句會處置這些資源。若取得null資源,則不會呼叫dispose,也不會擲回任何例外狀況。

下列形式的using陳述式

using (resourcetype resource = expression) statement
對應到兩個可能展開中的其中乙個。當resourcetype為數值型別時,展開為

finally

}

否則,當resourcetype為參考型別時,展開為

finally

}

在任何一種展開中,在內嵌陳述式中的resource變數都是唯讀的。

下列形式的using陳述式

using (expression) statement
擁有相同的兩種可能展開,但在此狀況中,resourcetypeexpression的隱含編譯時期型別,而在內嵌的陳述式中無法訪問resource變數,而且它也是不可見的。

當資源擷取採取區域變數宣告的形式,就可能取得特定型別的多重資源。下列形式的using陳述式

using (resourcetype r1 = e1, r2 = e2, ..., rn = en) statement
完全等於一串行巢狀的using陳述式:

using (resourcetype r1 = e1)

using (resourcetype r2 = e2)

...

using (resourcetype rn = en)

statement

lxml的另一種用法

python中lxml庫是乙個十分強大的xml解析庫,最近在看 白帽子將web掃瞄 這本書的時候,裡面提供了一種不同於以往的用法,因此在這將這個方法記錄下來 傳統的lxml庫的使用方法類似於下面這樣 from lxml import etree tree etree.html html 假定html...

模板函式的另一種用法

今天遇到了乙個bug,具體如下 type a struct type b struct此時在controller檔案中this.data lists blist,即通過模板傳遞 b形式的slice,在html檔案中通過模板呼叫 位置1 位置2 output somrthing with結束標誌 在上...

另一種尊重

上中學的時候,有一節課印象非常深刻。老師問我們如果無意闖入乙個房間,發現房間裡有一位女士正在洗澡,這時應該怎麼辦?有同學回答就當什麼也沒看見,退出房間。還有同學回答 說聲對不起!女士。然後退出去。老師笑了笑說,還有更好的答案,那就是 對不起,先生!有一對結婚多年的夫妻,有一次出差在外的妻子有一件急事...