Time of Update: 2018-12-07
FormatterService(在System.Runtime.Serialization命名空間內)的GetUninitializedObject方法是.NET還原序列化中CLR初始化對象用到的方法(眾所周知,還原序列化中對象的建構函式是不被調用的)。這個方法我們也可以直接使用來達到相同的效果。 如下代碼:using System;using System.Runtime.Serialization; namespace Mgen{ class a {
Time of Update: 2018-12-07
程式示範:進入程式,首先得輸入最大容量,比如輸入10: 接下來生產線產生了,最初當然只有0個項目,我們現在開始生產5個項目,在“生產數量”中輸入5,如: 然後點擊“生產”,5個項目就被生產了: 接下來我們再生產12個項目,加上之前的5個項目,此時一共會生產17個項目,但是總容量是10,所以會有7個生產項目要等待(線程阻塞): 接著再去生產10個項目,此時已經有7個生產項目在等待狀態,後續的生產項目需求會疊加: 現在的情況是:有10個項目已經被生產,還有17個項目等待被生產,下面我們消費5個項目,
Time of Update: 2018-12-07
眾所周知:AppDomain.DoCallBack方法會在指定應用程式定義域中執行代碼,如果傳入委託是靜態,那麼委託正常進行。如果傳入委託是對象的成員函數,那麼這個對象會被封送(按值或者按引用)。當傳入委託是以Lambda運算式的形式,那麼有些地方值得注意。如果是傳入對外部變數捕獲的Lambda運算式,那麼DoCallBack方法總會拋出異常的,看下面代碼(這是一種錯誤的在另外一個應用程式定義域中建立Remoting對象的方法)using System;using System.Runtime.
Time of Update: 2018-12-07
AppDomain的Load方法有諸多重載,但是沒有一個等效於LoadFrom(這裡是指Assembly的LoadFrom)。其AssemblyName和string參數都是針對Load(string參數是指程式及名稱的全名而不是路徑)。而byte[]參數相當於LoadFile。 AppDomain.ExecuteAssembly可以傳入檔案路徑,但是從名字上可以看出來這裡只針對可執行檔程式集。(AppDomain還有ExecuteAssemblyByName可以傳入AssemblyName,即
Time of Update: 2018-12-07
嘗試用3種.NET方法寫出下面的C/C++指標作業碼。注意所有.NET方法均不直接引用外部函數資源(DllImport),都是使用.NET中原生態提供的方法。注意:所有代碼輸出僅代表在32位和Little-Endian的CPU環境的運行結果。 來看這一段典型的C/C++指標作業碼:/***************************** C/C++ 代碼****************************/int i = 0xAA00FF;//i的記憶體儲存形式:FF 00 AA
Time of Update: 2018-12-07
研究一下正則RegexOptions枚舉的三個針對匹配行的區別,對應None,SingleLine(單行)和Multiline(多行)枚舉值。 結論是:None:(.)匹配任何字元除了\n。^和$不起作用。 Singleline:(.)匹配任何字元。^和$匹配整個字串 Multiline:(.)匹配任何字元除了\n。^和$匹配每行的開頭和結尾。 另外貌似目前.NET的正則對\A和\Z支援的不是很好。下面測試代碼:(注意由於輸出字元中有分行符號,因此用ASCII碼作輸出)//+ using
Time of Update: 2018-12-07
當不使用SMTP的25連接埠號碼發送郵件,某些低許可權執行環境可以會拋出異常,最好還是在執行操作前進行許可權的檢查。 SMTP在.NET中對應的許可權是:SmtpPermission類型(還有聲明式的SmtpPermissionAttribute特性,他們都在System.Net.Mail命名空間下)。他的Access屬性控制許可權的內容。對應一個SmtpAccess枚舉。有3個值:None(沒有),Connect(串連預設連接埠25),ConnectToUnrestrictedPort(串連任
Time of Update: 2018-12-07
在ModuleBuilder.DefineType方法中的TypeAttributes枚舉值中,只有Class和Interface,哪裡有Struct?呵呵,其實一個結構體就是繼承於ValueType的sealed類型。這段代碼:struct a{ } 將會被編譯成如下IL:.class private sequential ansi sealed beforefieldinit a extends [mscorlib]System.ValueType{
Time of Update: 2018-12-07
目錄1. 單個程式集配置重新導向2. 發行者策略程式集3. 開發測試中頻繁版本更新 返回目錄1. 單個程式集配置重新導向當單個依賴程式集,比如A,依賴程式集B,比如使用B的1.0版本。現在B從1.0升級到了2.0。那麼此時可以在程式集A中手動重新導向B的版本,這樣在程式集A運行後會自動使用更新的2.0版本的程式集B。 程式集的版本重新導向須寫在程式集自己的設定檔中(App.config)。在<configuration> – <runtime> –
Time of Update: 2018-12-07
一個動態對象竟然支援自己調用自己,根據MSDN的解釋,此項功能僅在C#中被支援,VB並不可以。具體過程則是改寫動態對象(DynamicObject類)的TryInvoke方法。和普通函數調用的TryInvokeMember方法類似。TryInvoke的第一個參數是Binder:InvokeBinder。但是和TryInvokeMember的InvokeMemberBinder不一樣,它沒有Name屬性,因為對象自己調用自己自然沒有方法名稱。其他屬性不需要多說明,CallInfo代表調用資訊。Re
Time of Update: 2018-12-07
HTTP請求包頭資訊中有一個Range屬性可以指定索取部分HTTP請求的檔案。在.NET中則通過HttpWebRequest.AddRange方法來定義資料的範圍。當添加了Range屬性的HTTP請求發送後,如果伺服器支援該請求,也就是說支援部分資料提取(也是我們常說到的支援斷點續傳的下載,所謂斷點續傳的下載就是用一個Range屬性來指定沒有下載到的範圍),那麼伺服器會返回Partial Content狀態值。否則會返回OK狀態值(200代碼)。注意如果伺服器支援Range但是HTTP
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
我們常見到的位域標誌定義都是基於正數的,不過其實也可以定義成基於負數的,工作起來則和正數標誌位域一樣。 比如定義一個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
不同於之前的HttpWebRequest類型,在.NET 4.5中新的HttpRequestHeaders類型直接有一個Authorization屬性,對應類型是:AuthenticationHeaderValue,同樣在System.Net.Http.Headers命名空間內。AuthenticationHeaderValue有兩個屬性Parameter和Scheme。為了弄清這兩個參數在對Authorization屬性的作用,我們可以做一個簡單的測試:首先得記得加入.NET
Time of Update: 2018-12-07
通過繼承ConfigurationValidatorBase類,使用者可以自訂一個配置系統的驗證器,可是今天使用這種方法發現了一個問題:每個ConfigurationProperty在驗證其實際值前,都要對其預設值先進行一次驗證,注意這裡只是驗證一次,發生在驗證第一個ConfigurationProperty的值之前。表現形式就好像靜態建構函式似的。 比如下面的ConfigurationSection和ConfigurationValidatorBase代碼:(代碼類比驗證年齡必須大於等於15歲
Time of Update: 2018-12-07
目錄1. 不是必須要IEnumerable和IEnumerator2. 支援繼承IDisposable的IEnumerator 返回目錄1.
Time of Update: 2018-12-07
注意:這是另一篇文章“.NET(C#):淺談資訊清單資源和RESX資源”的一部分。所有提及類均在:System.Resources命名空間內。來看這三個類的常用成員:interface IResourceWriter: IDisposable void AddResource(string name, object/string/byte[]); //添加資源資料 void Generate(); //更新緩衝區(Flush) void Close(); //
Time of Update: 2018-12-07
' VB Code: which includes derived class. Imports SystemImports Donis.CSharpBookNamespace Donis.CSharpBook Public Class Starter Public Shared Sub Main Dim child as New XChild child.MethodA() child.MethodB()
Time of Update: 2018-12-07
1 安裝sudo apt-get install gnustep*2 編寫代碼#import <Foundation/Foundation.h>int main( int argc, const char * argv[] ) {NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];NSLog(@"Hello world\n");[pool drain];return 0;
Time of Update: 2018-12-07
tire.h#import <Cocoa/Cocoa.h>@interface Tire : NSObject{ float pressure; float treadDepth;}-(void) setPressure: (float) pressure;-(float) pressure;-(void) setTreadDepth: (float) treadDepth;-(float) treadDepth;@end