Time of Update: 2018-12-07
以前,需要檢查一個執行個體的類型時,我都使用強制轉換操作。還在剛Pascal轉到C++的時候,是這樣寫的,感覺有代碼有點笨拙。 (C#代碼)bool CheckIsType(object source){ try { TagClass result = (TagClass)source; return true; } catch { return false;
Time of Update: 2018-12-07
通過設定限制"全形"輸入。 幾年前,我在net 1.0上做一個項目,交付之後客戶總是說模糊搜尋出來的資料不準確。翻看代碼,沒問題!看看日誌,也沒問題!運行測試,沒報錯。最後只好跑到客戶那裡看個究竟,一天輸入的數千份單據中如果按目的地去查是總數是10,如果按照操作員(一個目的地由只由一個操作員錄入)去查,總數卻是35,實際上應該是35。天啊是什麼回事?查了下資料庫,原來是中文IME惹的禍。目的地的正確地址是"H.K.
Time of Update: 2018-12-07
假如,有這樣的一個需求,有一個病人執行個體和一個居民執行個體,只要名字相同,就說他們是同一個人,操作應該對等。你怎樣判斷呢? public class People{ private string nameField = ""; public string Name { get { return nameField; } set { nameField = value; } }}public class Person : People {
Time of Update: 2018-12-07
Windows Presentation Foundation (WPF)推出一段日子了,國外熱火朝天;但國內好像靜觀其變,就像C#剛剛推出的狀況一樣。WPF是什嗎?一查才知道,這個是專門做展現層的。裝了Visual Studio 2008那麼久了,沒理由不去試一下,是騾是馬拉出來遛遛。 第一步,建立WPF應用程式項目。在Visual Studio 2008上選擇菜單"檔案>>建立>>項目…";在"建立項目對話方塊"中選擇"項目類型>>Visual
Time of Update: 2018-12-07
介面有這樣的需求,部分輸入框(如電話號碼等),只允許輸入數字字元。大家怎樣解決呢?有人說用Regex處理驗證事件。我覺得這樣晚了一點,而且很難控制全面。 我向大家推薦一種繼承TextBox的做法。 public class DPTextBox : TextBox { public DPTextBox() : base() { base.ImeMode = ImeMode.Disable; } protected override bool
Time of Update: 2018-12-07
我最近向的軟體工程管理職位轉變,感覺力不從心,由於缺乏管理經驗,一直覺得代碼工程失控,思維推不下去。在要求下面做個功能的時候,寫代碼的同事總是丟三落四,或者完成了不告訴你,或者做了邏輯跟你想得不一樣,或者整個模組託管給他做(黑盒)整個邏輯就亂套了,到維護的時候每人能看懂他寫的代碼。我Boss也經常說我管理的工程進展緩慢,工作量無法統計等等。辦法是逼出來的,建立了這套標記方案,拿出來給大家討論。 標記的格式: [任務類別] Task: '['[執行任務人]{Finish=[是否完成];
Time of Update: 2018-12-07
不知道算不算bug,還是我的配置有誤。 說說我的情況,一個大的項目下包括幾個相對獨立的小項目,比如a,b,c,大項目如X,我為X建了一個Repository,然後下面分別是a,b,c的目錄(其實還有上一層的trunk等目錄,和這個問題無關,先不說了)。 使用apache做伺服器,許可權控制項用apche的基本使用者驗證,設a,b,c的訪問使用者分別為三個不同的使用者ua,ub,uc,而X的訪問使用者為ua,ub,uc都可以訪問。這是正確的,如果在X這層就不可訪問,那下面的abc也就不可能訪問了。
Time of Update: 2018-12-07
經常有客戶抱怨程式遇到錯誤的時候程式就退出了,甚至來不及儲存表單的輸入資料,如果是普通的搜尋介面也就罷了,但如果客戶是話務中心,問題就嚴重了.按道理,我們的程式員應該處理所有的異常,但有事實上做到的很難,因為出乎意料的情況太多了. 在這篇文章,我給大家介紹一下我的處理方法。 首先介紹相應的C#相關知識: System.Windows.Forms.Application類 提供 static 方法和屬性以管理應用程式,例如啟動和停止應用程式、處理 Windows
Time of Update: 2018-12-07
用 .NET Memory Profiler 跟蹤.net 應用記憶體使用量情況--基本應用篇 作者:肖波 .net
Time of Update: 2018-12-07
採用管道進行通訊的例子續作者:肖波 今天對 .net 2.0 的 System.Runtime.Remoting.Channels.Ipc 做了一個相同的測試,測試結果是每秒傳輸速度為 33MB。 由於底層技術都是一樣的,我估計其比我這個例子(180MB每秒)慢的主要原因應該是在序列化上。 System.Runtime.Remoting.Channels.Ipc 的測試代碼見下面連結,我把微軟給的例子簡單改了一下。
Time of Update: 2018-12-07
APUE 3.5關於重新導向有個容易迷惑人的問題:./a.out > outfile 2>&1./a.out 2>&1 > outfile問兩者區別。自己試了下, int main() { printf("output to stdio\n"); fprintf(stderr,"output to stderr\n"); return 1; } 結果如下: qun@ThinkPad
Time of Update: 2018-12-07
cat before.txt 輸出: This is a line to be deleted This is a line that will be changed This is a line that will be unchanged cat after.txt 輸出: This is a line that has been changed This is a line that will be unchanged This is a line that
Time of Update: 2018-12-07
首先,大致說下U盾的工作流程。 你的數位憑證有一對,一份在U盾裡的私密金鑰,一份在銀行的公開金鑰(其實兩份銀行都有)。U盾的原理很類似於雙向認證的TLS(SSL)或者其它用到RSA的雙向認證驗證手段,以下步驟可能和U盾實際執行的有所區別,但本質相同: --銀行先給你一個"衝擊",它包含了隨機數,以及該隨機數HASH,它們都由公開金鑰加密,這樣就可以保證只有你能解密這個"衝擊" --你計算該隨機數的HASH,並和用私密金鑰解出的HASH,兩者相同後,便可確認銀行的身份 --接下來,以一
Time of Update: 2018-12-07
前言 甘特圖的畫法很多,工具也有很多。我的甘特圖只是需要Excel,甚至可以用Google的表格去做也可以,最重要的是簡單,明了。他所擁有的特性還是讀者自己體會吧。我在這裡只是介紹一個我用的比較順手的方法,供大家參考,也希望大家多提建議,使他更完善。畫法
Time of Update: 2018-12-07
有一種應用情境:將對象用Udp廣播出去。UdpClient的Send方法參數類型是byte[]。前天見到有位哥們寫的代碼,居然是將對象序列化成檔案,然後再讀取檔案發送出去,接受則是反過來,將接受到的byte[]寫成檔案,然後讀取檔案再還原序列化。效率低就不用說了,關鍵是占空間,如果寫的是PDA程式,那裡經得起這樣折騰。其實序列化可以藉助MemoryStream,直接將對象序列化到MemoryStream,然後使用MemoryStream的GetBufferf方法便可以獲得byte[].List&
Time of Update: 2018-12-07
前些天,帶一個新兵入行。唉,真的無語。說不上能力差,要做的任務,只要時間給長點還是能做出來,但結果總是差那麼一點,例如PDA的介面大部分空間在螢幕之外,列資料賦值錯誤,線程沒有關閉成幽靈線程等等。 下達的任務總是從Google上下載一段相似的就算,不求甚解,也不講求最佳化。有些適應需求的修改,哪怕是一點點,他都觸手無策。眼看任務控制點就快到了,我只能親自上馬。他可好,出去抽煙了。在他出去抽煙的時間,我還發現一個致命的錯誤,病人的血型屬性字典跟其他屬性值混淆了。抽完煙回來,給我說了句話,我終於明白
Time of Update: 2018-12-07
yield關鍵字有什麼功能,估計大部分人都跟我先前一樣一頭霧水。我對他產生關注是在做一份面試題之後。我查了一下Msdn關於yield 的描述:在迭代器塊中用於向枚舉數對象提供值或發出迭代結束訊號。還是一頭霧水吧。我來說一下我的理解吧,yield在迴圈體中出現,在每次迴圈返回當次運算結果;yield是跟return或者break連用,充當方法輸出的標記。yield return和return的區別: 例如: int n=1;int m=100;while(n<100){ n+=n;
Time of Update: 2018-12-07
以前從來沒有接觸過params關鍵字,一直很好奇一些類型的string.Format(...)方法具有無限長的方法參數。有時候被逼用數組代替。發現params關鍵字有,編寫不定長參數的方法很簡單 就是在原先需要不定長常數類型錢加上params就可以了。 例如public int Sum(params int[] narray){ int ret=0; foreach(int n in narray) { ret+=n; } return
Time of Update: 2018-12-07
平常在做Winform的應用程式中,可能很少有人不用到多線程吧?一般說來,我們的背景工作執行緒多和介面的線程(主線程)不在一個線程中,道理也很簡單,在一個線程中的話,較長時間等待的工作會阻塞介面線程,影響介面顯示。下文中我提到的“背景工作執行緒”均指從介面線程引發的新的線程
Time of Update: 2018-12-07
傳統的asp用的'<%Code