Time of Update: 2018-12-07
此類型在System.ComponentModel命名空間內,而不是你可能認為的System.Runtime.InteropServices命名空間內。 但是他的父類:ExternalException,則是在System.Runtime.InteropServices命名空間內。 ExternalException的父類是SystemException(當然現在SystemException和ApplicationException該繼承哪個界限已經很模糊了)。注意ExternalExcept
Time of Update: 2018-12-07
對於參數,需要使用Expression.Parameter建立ParameterExpression對象,注意需要在建立Lambda時傳入ParameterExpression數組才可以使參數有效。對於本地變數,首先Expression類型提供Variable方法,但是這個Variable方法返回的也是ParameterExpression,實際上他們內部建立的都是同一種ParameterExpression對象,唯一的區別是Parameter方法會考慮Type.IsByRef的情況,但是Var
Time of Update: 2018-12-07
ConfigurationElementCollection.ElementName屬性在MSDN的解釋是這樣:Gets the name used to identify this collection of elements in the configuration file when overridden in a derived
Time of Update: 2018-12-07
更新:一篇更全面的文章:http://www.cnblogs.com/mgen/archive/2011/11/28/2266010.html註:所有樣本均擬在Little Endian環境下運行在C/C++中,操作原始(預定義)資料類型的記憶體位元組分布很簡單,我們可以使用指標來這樣做:/***************************** C/C++ 代碼****************************/int i = 0xAA00FF;//i的記憶體儲存形式:FF 00
Time of Update: 2018-12-07
何為“流文本”?
Time of Update: 2018-12-07
眾所周知:AppDomain.DoCallBack方法會在指定應用程式定義域中執行代碼,如果傳入委託是靜態,那麼委託正常進行。如果傳入委託是對象的成員函數,那麼這個對象會被封送(按值或者按引用)。當傳入委託是以Lambda運算式的形式,那麼有些地方值得注意。如果是傳入對外部變數捕獲的Lambda運算式,那麼DoCallBack方法總會拋出異常的,看下面代碼(這是一種錯誤的在另外一個應用程式定義域中建立Remoting對象的方法)using System;using System.Runtime.
Time of Update: 2018-12-07
曾經寫過一篇文章:.NET(C#) TPL:Task中未覺察異常和TaskScheduler.UnobservedTaskException事件 講述在.NET 4.0中,Task的未覺察狀態的異常會在記憶體回收時終結器執行線程中被拋出,像其他未處理異常一樣,這個異常會使整個進程崩潰。而在.NET Framework 4.5 beta後,這個有所改變,這個未覺察的異常不會引發進程崩潰。 所以下面在.NET Framework 4.0中會發生異常的代碼在.NET Framework 4.5
Time of Update: 2018-12-07
在C/C++中,整數變數的膚質是從來不進行越界檢查的,於是你可以給一個int變數成功賦予比INT_MAX(C/C++中定義的int的最大值)都大的數字,或者給不帶正負號的整數賦予一個負數值,結果就是值會被暴力塞到對應變數的空間內,因此二進位中多餘的高位可能會被剪掉。 事實上C語言標準並沒有強制這樣做,但是C語言的具體執行通常都會這樣的。 可以參考C語言標準4.7 Integral
Time of Update: 2018-12-07
考慮這樣一個問題,一個類型執行一個介面的方法,這個方法沒有修飾virtual,那麼這個類型的子類還可以修改這個介面的執行方法嗎?答案是永遠可以,並且無論介面是顯示執行還是隱式執行,總是可以改寫的。 來看下面代碼,一個介面,一個父類,一個子類,子類繼續執行父類已經執行的介面方法定義。interface IA{ void doo();} class A : IA{ public void doo() { Console.WriteLine("A"); }} //
Time of Update: 2018-12-07
第一點需要提的就是第一個await發生異常後,後續的await不會進行,但是注意此時的Task仍然會進行的,當然後面的Task如果拋出異常的話,異常則屬於未覺察異常,這個未覺察異常在.NET 4.0會在記憶體回收時引發程式崩潰,但在.NET 4.5 beta後不會引發進程崩潰。更多相關資訊可以參(.NET
Time of Update: 2018-12-07
我們常見到的位域標誌定義都是基於正數的,不過其實也可以定義成基於負數的,工作起來則和正數標誌位域一樣。 比如定義一個8位的位域,提供兩個選項分別是最高位和最低位為1。然後分別以byte和sbyte作為枚舉背後資料類型,則枚舉應該這樣聲明:[Flags]enum a : byte{ //128的原碼為:10000000 High = 128, Low = 1} [Flags]enum b : sbyte{ //-128的補碼為:10000000 High = -128
Time of Update: 2018-12-07
XmlReader預設是讀取XML檔案中的Whitespace和注釋的。 比如這個XML:<root> <!-- root中 --> <file> <file.attr>hidden</file.attr> a.txt </file></root> XmlReader讀取代碼://data.xml代表上面的XML檔案using (var xr =
Time of Update: 2018-12-07
不同於之前的HttpWebRequest類型,在.NET 4.5中新的HttpRequestHeaders類型直接有一個Authorization屬性,對應類型是:AuthenticationHeaderValue,同樣在System.Net.Http.Headers命名空間內。AuthenticationHeaderValue有兩個屬性Parameter和Scheme。為了弄清這兩個參數在對Authorization屬性的作用,我們可以做一個簡單的測試:首先得記得加入.NET
Time of Update: 2018-12-07
非泛型類:Hashtable 從.NET Framework 1.0就有的方法1. 直接構建Hashtable類利用的建構函式:public Hashtable(IHashCodeProvider hcp, IComparer comparer); 構建方法:Hashtable hashtable = new Hashtable(CaseInsensitiveHashCodeProvider.Default,
Time of Update: 2018-12-07
通過繼承ConfigurationValidatorBase類,使用者可以自訂一個配置系統的驗證器,可是今天使用這種方法發現了一個問題:每個ConfigurationProperty在驗證其實際值前,都要對其預設值先進行一次驗證,注意這裡只是驗證一次,發生在驗證第一個ConfigurationProperty的值之前。表現形式就好像靜態建構函式似的。 比如下面的ConfigurationSection和ConfigurationValidatorBase代碼:(代碼類比驗證年齡必須大於等於15歲
Time of Update: 2018-12-07
這些應該算是.NET程式員的基本功吧,可是我今天用的時候卻有點猶豫,最後看筆記才又明白……罪過罪過 就是這三個函數的用法//Type類的函數class Type bool IsInstanceOfType(object); //判斷對象是否是指定類型 //類型可以是父類,介面 //用法:父類.IsInstanceOfType(子類對象) bool IsAssignableFrom(Type) //判斷兩個類型的關係 //類型可以是父類,介面 //
Time of Update: 2018-12-07
今天看了一道微軟認證MCTS的樣題,考的是StringBuilder容量(Capacity屬性)的變化,暈……連這種題都有啊,呵呵,不過挺有意思的,為此我研究了一下一些常見的有Capacity屬性的容器,也就是題目上說的那三個,另外還有個ArrayList,不過它和List<T>工作原理一樣,就沒把他放在標題上。 下面是我的電腦測試結果: (32位,WinXP SP2家庭版,.NET Framework 3.5 SP1)
Time of Update: 2018-12-07
簡單的改造一下,可以使ObservableCollection在任何有新成員加入的時候(注意包括已有成員被替換的情況),需要有一個事件進行通知,同時可以設定是否允許該新元素被加入。 原理很簡單,利用INotifyCollectionChanged介面的相關事件,來判斷新元素,然後出發自己的事件通知,最後根據事件EventArgs決定是否刪除這個新元素。 代碼://+ using System.Collections.ObjectModel;//+ using
Time of Update: 2018-12-07
目錄1. 不是必須要IEnumerable和IEnumerator2. 支援繼承IDisposable的IEnumerator 返回目錄1.
Time of Update: 2018-12-07
今天發現軟體中一個很奇怪Bug,究其原因是沒有正確理解“等號和異常”的問題,來看下面這段代碼:static void Main(string[] args){ int[] arr = new int[3]; int i = 0; try { arr[i++] = doo(); } catch { } Console.WriteLine(i);} static int doo(){ throw new