[C#] 在 Visual Studio 2015 使用 C# 7

昨天在 "C# 7 不能編譯?" 一文的最後,我有提到不是一定要 Visual Studio 2017 才能使用 C# 7,只要 Microsoft.Net.Compilers 可以運作 (.NET 4.5.1 以上),就能使用 C# 7 快樂的寫程式,有朋友回應說 Visual Studio 2015 上使用 C# 7 ,Microsoft.Net.Compilers 已經升級到 2.0,但卻無法編譯... (這個問題要解決有個但書)

...繼續閱讀 »

[.NET] 關於晚期繫結 (Late Binding)

晚期繫結是一種程式語言與作業系統的手法,用意在於避免因為編譯時期的型別檢查機制,導致程式員在編寫程式時,需要處理過多的型別資訊 (Type Information),晚期繫結可以有效的處理在平台之間型別資訊的隔離,讓編譯出來的程式可以在特定的平台之間執行,而不需要被型別資訊綁住,不過也不能過度濫用,除非原生平台就是要用晚期繫結 (例如 JavaScript)。

...繼續閱讀 »

[.NET] 選用介面與抽象類別的原則

這種問題大概也是學 OOP 的人最會問的十大 FAQ 之一,介面和抽象類別都有對其實作者與衍生類別有相當的強制力,因此如果只是要強制實作者必定要實作某些方法或屬性的話,其實這兩種都能用,不過實際上在用時還是有差異的,這些差異要看你的原始目的以及強制力的範圍而定。

...繼續閱讀 »

[.NET] 動態語言能力:自製 dynamic 物件 (1): ExpandoObject 物件

dynamic 型別,這個由 C# 4.0 (.NET Framework 4.0) 開始,打開了 C# 這個編譯式語言的動態之路,它的執行時期決議機制,使得開發人員能在只知道它的成員的情況下即可呼叫使用,它是動態語言執行期 (Dynamic Language Runtime, DLR) 的一部份,相對於 CLR (Common Language Runtime) 需要編譯才會產生相關的程式結構,在 DLR 的機制下,程式只在執行期才會解析相關的程式結構,並產生執行器所需要的資訊,而由於 DLR 是在 CLR 之上,使得 DLR 平台可完全相容於 CLR,並且與 CLR-compliant 的平台與程式語言相互使用。

...繼續閱讀 »

[.NET] PropertyGrid 控制項的進階使用:自訂資料檢視與編輯器

最近這一個月事情還真不少,不斷的在嘴砲和務實的角色之間切換,也寫了不少的程式碼,而且為了因應今年 9/13-15 的微軟大拜拜 (Tech.days) 的課程,我還特別寫了支範例程式準備要在課堂上 demo 用,這支範例程式是 Windows Azure Platform 上的服務管理應用程式,核心均來自 Service Management APIs,很快的,就在 Tech.days 2011 Taiwan 研討會中將正式釋出...

...繼續閱讀 »

[.NET][OAuth Series] EasyOAuth Library for Web Application

自昨天首發 EasyOAuth Library for Desktop Application 後,今天再進一步發表 EasyOAuth Library for Web Application,這個函式庫可以支援 ASP.NET 與 ASP.NET MVC 應用程式開發支援 OAuth 功能的 Web 應用程式,它一樣可以在少量程式開發的情況下讓 Web 應用程式支援 OAuth 的功能,並且與 EasyOAuth Library for Desktop Application 一樣,可支援 Google, Facebook, Yahoo 與 Twitter 四種內建的 OAuth Service Provider。

...繼續閱讀 »

[.NET][OAuth Series] EasyOAuth Library: 容易使用且可擴充的 OAuth Library

這是筆者的第三個 Codeplex 開放原始碼專案,承繼前面四篇 OAuth Series 文章的說明,EasyOAuth Library 建構於 .NET Framework 之上,並且可以很容易的將 OAuth 的功能套用到自己的 .NET 應用程式中,並且開發人員可以依照 EasyOAuth Library 開放的介面,為非內建的 OAuth Service Provider 開發介面,以在 EasyOAuth Library 中直接使用。

...繼續閱讀 »

[OAuth Series] 使用 Access Token 存取 Private APIs

在前一回完成了整個 OAuth 驗證與授權的流程後,程式應該可以成功取得 Access Token 以及 Access Token Secret,只要有這兩個資料,應用程式就可以以 Access Token 所代表的使用者來與 OAuth 服務的 Private API 來互動,大多數 OAuth 服務上的 API 都會需要先取得 Access Token 後才可以使用 (雖然還是有少數可以不用啦),所以這篇文章就來說明怎麼使用 Access Token 來存取 Private APIs。

...繼續閱讀 »

[OAuth Series] 撰寫程式,完成 OAuth 驗證與授權,並處理 OAuth 的各式參數

在前一篇文章中,已經大略的介紹過 OAuth 所使用到的各類參數,這些參數的產生與使用將會決定 OAuth 的程序是否順暢,因為在每次針對服務的 private API 呼叫,都會用到 OAuth 的認證標頭訊息,所以怎麼樣產生正確的訊息就是用戶端程式最重要的課題。

...繼續閱讀 »

[如何學習寫程式] #9 - 寫程式的人,你不能不會 "資料結構" Part 1

資料結構 (data structure) 是資料的組成方式,資料可以是字串或是二進位資料 (binary data),組成方式則要看不同資料整理的需求,可以是分布在記憶體不同位置,然後用特定方法管理,或是以特別的格式排列組合,以達成有效率管理資料的方式,而一般程式設計人員接觸到最多的是資料結構,因為這會決定你在程式中處理資料的方式,簡單的資料當然可以用很簡單的結構來組織,但是如果在寫程式時不在乎資料結構的話,很容易發生寫出的程式效率低落的問題。

...繼續閱讀 »

[Code隨手寫] 樂透對獎程式兼新年恭賀

適逢虎年除夕,即將邁入兔年的前一刻,台彩宣布百萬中獎的100個號碼,但因為一張一張對真的會眼花,索性花了十來分鐘撰寫了一支小程式,由電腦去做這件事,雖然對的結果 ... 沒中 Orz,但其實寫下去也是蠻有趣的,但會不會再改成真的可以對獎的程式,那就看我想不想做了。順道藉此文恭祝大家新年開運旺旺來,心想事成,萬事如意。

...繼續閱讀 »

[.NET] 使用 HTTP Handler 部署不同作業系統版本的 ActiveX Control

筆者在 ActiveX 控制項開發的封裝部署一文的最後,曾經提到 Windows XP 和 Windows Vista/7 的部署差異,這會讓開發人員需要依照作業系統的不同來撰寫 INF 檔案來自動化安裝,而且還要在網頁中偵測不同的作業系統給予不同的 CAB 檔案,但我們有一些方法來簡化這個部份的處理,讓開發人員可以在不動一行 <object> 宣告下,支援 Windows XP 和 Windows Vista/7 的作業系統環境。其實方法很簡單,只要使用 HTTP Handler 就能做到了。

...繼續閱讀 »

Dependency Walker

有使用過 Windows Server 2003 SDK 之前版本或是 Visual Studio.NET 2003 之前版本的開發人員都知道,在隨附的工具中,有一個工具可以拿來偵測該執行檔或 DLL 還需要哪些 DLL,並且可以看到在 DLL 或 EXE 中開放的 C 函式,這個工具稱為 Dependency Walker (depends.exe)

...繼續閱讀 »

日期與時間的運算

好像不少人都不知道時間是可以相減的,而且不會太難,DateTime 有覆寫 "-" 這個運算子,所以只要 DateTime2 - DateTime1,或是 DateTime - TimeSpan 都可,不過它傳回來的是一個 TimeSpan (時間幅度) 的物件,可以由這個物件中的方法來取得兩個時間的差異。

...繼續閱讀 »