Time of Update: 2018-12-08
透過IL看C# (外一篇)警惕常量陷阱原文地址:http://www.cnblogs.com/AndersLiu/archive/2008/11/23/csharp-via-il-constant-a.html原創:Anders Liu摘要:常量的含義本是“永遠不會變的量”,但是如果作為類庫開發人員,把常量用作“可以由我變,但不能由你變”的量,那就可能鑄成大錯了。下面是老劉寫的一個類庫中的一個類:代碼1 - 老劉的“類庫”namespace
Time of Update: 2018-12-08
大四的課還是蠻有意思的,其中有一個COM組件的課,感覺挺有收穫,做了一個小Demo,是關於COM彙總的, 彙總和包容是COM的基本特徵,老師上課沒把這倆的關係講清楚,也不大知道為啥放著簡單的包容不用,用彙總寫模組。通過做這個Demo,俺算是理解了。因為包容只是單向調用介面,也就是從外到內,不能從內到外。而彙總則是雙向調用的,非常的靈活。下面通過具體的例子說說。 這個小Demo是控制台調用三個動態連結程式庫的,每個連結庫中都有一個方法,最外面的庫CompB.dll裡面是減法運算,
Time of Update: 2018-12-08
閑來無事,研究了一個演算法。這天氣坐著都流汗。Code highlighting produced by Actipro CodeHighlighter
Time of Update: 2018-12-08
今天在做項目中遇到一個問題,項目中需要開發一個PC工具(要求是Windows),其中需要將一些檔案打包成gz檔案,gz檔案是UNIX系統中的壓縮檔,後來找了找網上的資源,只有解壓的C++源碼,沒有告訴你如何進行GZ格式的壓縮,當然了,你還可以使用7Z軟體對檔案進行GZ解壓縮。而本篇文章將用另外一個思路去實現GZ格式的解壓縮。 首先,建立一個C++的工程項目,這裡使用MFC表單項目。 功能很簡單,先看下整個表單設計: 上面一排通過“選擇檔案”在下面的列表中顯示檔案路徑,然後通過“壓縮”
Time of Update: 2018-12-08
一. 為什麼要lock,lock了什嗎?當我們使用線程的時候,效率最高的方式當然是非同步,即各個線程同時運行,其間不相互依賴和等待。但當不同的線程都需要訪問某個資源的時候,就需要同步機制了,也就是說當對同一個資源進行讀寫的時候,我們要使該資源在同一時刻只能被一個線程操作,以確保每個操作都是有效即時的,也即保證其操作的原子性。lock是C#中最常用的同步方式,格式為lock(objectA){codeB} 。lock(objectA){codeB}
Time of Update: 2018-12-08
1. 事件沒有通用性絕大多數對象沒有事件的設計需求,不會實現事件。2. 事件沒有抽象性事件並非對象的基本元素,並不反映對象的關鍵抽象。欄位反映對象狀態,方法反映對象行為,事件反映什嗎?一個觀察-通知的關係結構嗎?3. C#事件的實現效能比較低下. a.C#事件的背後是一個委託鏈表(單鏈表),單鏈表的遍曆調用效能遠低於數組鏈表(List<T>) b.C#事件預設實現會產生一個委託欄位執行個體,支援不用的委託欄位執行個體是一個效能負擔(參見WPF/SL裡面的路由事件的改造設計)4.
Time of Update: 2018-12-08
MonoTouch是利用C#語言進行iOS開發的跨平台解決方案,包括支援iPhone/iPad的開發,目前也支援了最新的iOS 6的版本。官方地址:http://xamarin.com/github Sample:https://github.com/xamarin/monotouch-samplesapp應用:http://xamarin.com/apps/allMonoTouch可以利用C#
Time of Update: 2018-12-08
好久沒有寫文章了,由於換工作了,所以一直沒有時間來寫博。今天抽個空練練手下~最近接觸了下Thrift,網上也有很多文章對於Thrift做了說明: Thrift是一種可伸縮的跨語言服務架構,它結合了功能強大的軟體堆棧的代碼產生引擎,以建設服務,工作效率和無縫地與C++,C#,Java,Python和PHP和Ruby結合。thrift允許你定義一個簡單的定義檔案中的資料類型和服務介面。以作為輸入檔案,編譯器產生代碼用來方便地產生RPC用戶端和伺服器通訊的無縫跨程式設計語言。
Time of Update: 2018-12-08
1:斐波那契數列演算法,如:1,1,2,3,5,8,13,21…… ,可以看到這裡面的規律吧.就是每一項是前面相鄰兩項之和.求第N項。 遞迴法: 1 public static int Fibonacci(int n) { 2 //參數合法性驗證 3 if (n < 1)4 Console.WriteLine("參數必須大於1!");5
Time of Update: 2018-12-08
本文意在解釋如何從應用程式層執行單條或者批量的預存程序(主要調用沒有任何結果集返回的儲存儲過程,當然也可以拓展到調用有結果集返回的預存程序).資料訪問層: 本層主要包括有下列成員:ParamData 結構StoredProcedure 類StoredProcedureCollection 類Execute 類其中ParamData 含有預存程序參數的名稱,值,以及各自的資料類型. 1struct ParamData 2{ 3public string pName,pValue;
Time of Update: 2018-12-08
json作為互連網上輕量便捷的資料轉送格式,越來越受到重視。但在伺服器端編程過程中,我們常常希望能通過智能提示來提高編碼效率。JSON C# Class Generator 能將json格式所表示的Javascript對象轉化成強型別的C#實體類,來實現減少代碼輸入的效果。http://jsonclassgenerator.codeplex.com/ ----開源的winform工具。http://json2csharp.com/---一款線上轉化工具,大家看名字就知道了。
Time of Update: 2018-12-08
折騰幾天記載一下,由於項目實際需要,從edmx產生的實體類能自動繼承自訂的基類,這個基類不是從edmx檔案中添加的Entityobject。利用ADO.NET C# POCO Entity Generator With WCF Support產生的tt檔案(比如model.tt)中找到<#=Accessibility.ForType(entity)#> <#=code.SpaceAfter(code.AbstractOption(entity))#>partial
Time of Update: 2018-12-08
c#用委託來實現事件通知機制。委託相當與c++函數指標。整個過程涉及一個呼叫者,一個被呼叫者,還有就是這個委託。- 實現步驟有以下幾步: 1. 申明委託, 2.定義呼叫者和調用的函數, 3.定義被呼叫者和具體實現的函數(被調用的函數)1.申明委託 ,在包裡或者類裡,public Code highlighting produced by Actipro CodeHighlighter
Time of Update: 2018-12-08
C#的核心文法和Java的文法很相似。然而,並不能說C#抄襲了Java。C#和Java都屬於C語言系列(包括C、Objective C、C++等),它們有類似的文法。正如Java在許多方面是C++的提煉版一樣,C#也可以視為Java的提煉版。 實際上,C#的許多文法結構與VB 6.0和C++的很多方面都大有淵源。例如,與VB6類似,C#支援正式的類型屬性(property,即內部用get、set來實現)的概念(與傳統的擷取方法和設定方法相反),且支援方法使用參數數組。與C++類似,C#
Time of Update: 2018-12-08
老田:但看這個申明符號確實沒有什麼用。不過當它和#if、#elif、#else、#endif這些預先處理指令結合起來之後,它的功能就非常強大了。 來看個樣本: #define debug //嘗試注釋和取消注釋這一句,然後運行程式看效果 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace第二章_樣本 {
Time of Update: 2018-12-08
----------------db.cs------------------------------ // TODO: 在此處添加建構函式邏輯 // } public static SqlConnection createConnection() { SqlConnection con=new SqlConnection("server=.;database=list;uid=sa;pwd=;"); return con; } }}-----------------------
Time of Update: 2018-12-08
#define可讓您定義符號。當您將符號用作傳遞給 #if 指令的運算式時,此運算式的計算結果為true。而#undef正好相反,它使您可以取消符號的定義,以便通過將該符號用作 #if 指令中的運算式,使運算式的計算結果為false。 定義方法為關鍵詞 + 空格 + 要定義的符號,例如 #define DEBUG //申明符號DEBUG #undef DEBUG
Time of Update: 2018-12-08
與其它的語言的編譯器不同,無論代碼中是都有空格、斷行符號或者tab字元等空格符,C#編譯器都不考慮這些字元。 C#代碼的外觀和操作方式與C++和JAVA非常的類似。初看起來,其文法可能比較混亂,不像書面英語或者其它的語言,但是,在C#編程中,使用的樣式是比較清晰的,不用花太多的力氣就可以編寫出可讀性很強的代碼。 與其它的語言的編譯器不同,無論代碼中是都有空格、斷行符號或者tab字元等空格符,C#編譯器都不考慮這些字元。這樣格式化代碼就有很大的自由度,但是遵循某些規則將有助於使代碼
Time of Update: 2018-12-08
在錯誤清單中,每一個錯誤或者警告後面都有詳細的顯示了具體報錯的是某個項目中的某個檔,多少行,多少列。這個整下我這樣的新手,還成。不過效果不是很明顯。 小天:額…老田,你太壞了。不過,我覺得你很壞,但是C#不壞,你看,在錯誤清單中,每一個錯誤或者警告後面都有詳細的顯示了具體報錯的是某個項目中的某個檔,多少行,多少列。這個整下我這樣的新手,還成。不過效果不是很明顯。 老田:真的嗎?嘿嘿,我就在上面的例題中再增加一行代碼,僅僅是一行代碼哦。增加的代碼如下 #line 300
Time of Update: 2018-12-08
接下來介紹一種C#中一種從來不會被轉化為可執行代碼,但卻會影響編譯過程的特殊指令。它們就是預先處理指令。 小天:既然從來都不會被執行,有什麼用啊?雖然注釋也都不會被執行,但是人家能夠協助我們使代碼更容易閱讀。 老田:所謂的預先處理指令,就是用來控制編譯器工作的一些指令,比如說使用預先處理指令來禁止編譯器編譯代碼的某一部分。就拿我們使用的Windows作業系統、Visual