2011年8月22日 星期一

多型 (C# 程式設計手冊)

 

多型 (Polymorphism) 常被視為物件導向程式設計在封裝 (Encapsulation) 和繼承 (Inheritance) 以外的第三個支柱。 「多型」是一個希臘字,表示「多種形體」,並有兩個特殊的面向:

  1. 在執行階段,在如方法參數和集合或陣列等地方,衍生類別的物件會被視為基底類別的物件。 當這樣的情況發生時,物件的宣告型別和其在執行階段的型別將不再相同。

  2. 基底類別可以定義與實作虛擬「方法」(Method),而衍生類別可以覆寫它們,表示衍生類別會提供本身的定義與實作。 在執行階段,當用戶端程式碼呼叫方法時,CLR 會查詢物件的執行階段型別,並叫用虛擬方法的覆寫。 因此在您的原始程式碼中,您可以呼叫基底類別上的方法,並讓衍生類別版本的方法執行。

虛擬方法能讓您以統一的方法使用相關物件的群組。 例如,假設您有一個繪圖應用程式,可以讓使用者在繪圖介面上建立各種類型的圖案。 在編譯時期,您並不知道使用者究竟會建立哪一種圖案。 然而,應用程式必須追蹤建立的所有圖案類型,並根據使用者的滑鼠動作更新圖案。 您可以使用多型,以兩個基本的步驟解決這個問題:

  1. 建立類別階層,其中每個特定的圖案類別都衍生自一般的基底類別。

  2. 透過對基底類別方法的單一呼叫,使用虛擬方法叫用任何衍生類別上的適當方法。

首先,建立稱為 Shape 的基底類別,以及像 Rectangle、Circle 和 Triangle 等衍生類別。 給予 Shape 類別稱為 Draw 的虛擬方法,並在每個衍生類別中覆寫此方法,以繪製該類別所代表的特定圖案。 建立 List<Shape> 物件,並在其中加入 Circle、Triangle 和 Rectangle。 使用 foreach 迴圈逐一查看清單,並呼叫清單中每個 Shape 物件上的 Draw 方法,以更新繪圖介面。 雖然清單中的每個物件都有 Shape 的宣告型別,但會受到叫用的是執行階段型別 (每個衍生類別中受覆寫版本的方法)。

多型 (C# 程式設計手冊)

2011年8月14日 星期日

執行非同步作業

 

執行非同步作業

SQL Server 允許應用程式執行非同步資料庫作業。非同步處理可讓方法立即執行,而不會在呼叫的執行緒上封鎖。這樣可允許多執行緒的許多功能與彈性,而不需要開發人員明確建立執行緒或處理同步。當初始化資料庫連接或初始化執行命令的結果時,應用程式會要求非同步處理。

執行非同步作業

2011年8月13日 星期六

加入 Installer 至服務應用程式

 

若要將安裝程式加入您的服務應用程式
  1. 在 [方案總管] 中,存取您希望加入安裝元件之服務的 [設計] 檢視。

  2. 按一下設計工具的背景 (Background) 來選取服務本身 (而不是它的內容)。

  3. 當設計工具取得焦點時,按一下滑鼠右鍵,再按 [加入安裝程式]。

    新類別 (ProjectInstaller) 和兩個安裝元件 (ServiceProcessInstallerServiceInstaller) 會加入至您的專案,服務的屬性值則會被複製到元件中。

  4. 按一下 ServiceInstaller 元件,並確認 ServiceName 屬性值是設定為和服務本身的 ServiceName 屬性相同的值。

  5. 若要決定如何啟動服務,請按一下 ServiceInstaller 元件,並將 StartType 屬性值設定為適當的值。


    結果

    Manual

    服務安裝後必須手動啟動。如需詳細資訊,請參閱 HOW TO:啟動服務

    Automatic

    每當電腦重新開機時,服務將會自行啟動。

    Disabled

    無法啟動服務。

  6. 若要決定在哪一個安全性內容中執行服務,請按一下 ServiceProcessInstaller 元件,並設定適當的屬性值。如需詳細資訊,請參閱 HOW TO:指定服務的安全性內容

  7. 覆寫任何需要執行自訂處理的方法。如需詳細資訊,請參閱 HOW TO:覆寫安裝元件的預設方法

  8. 針對專案中的每一個其他服務執行步驟 1 到步驟 7。

HOW TO:加入 Installer 至服務應用程式

ClickOnce 部署概觀

ClickOnce 是一項部署技術,可讓您建立透過最少的使用者互動來安裝和執行的自行更新 Windows 架構應用程式。ClickOnce 部署能克服部署中固有的三個主要問題:

  • 更新應用程式的困難 若使用 Microsoft Windows Installer 部署,每當應用程式更新時,使用者就必須重新安裝整個應用程式;而經由使用 ClickOnce 部署,您可以自動提供更新,並且只會下載應用程式中經過變更的那部分,然後再從新的並存資料夾重新安裝完整、更新的應用程式。

  • 對使用者電腦的影響:如果使用 Windows Installer 部署,應用程式通常會仰賴共用元件,而且可能會造成版本控制衝突。不過,只要使用 ClickOnce 部署,每個應用程式都是獨立的 (Self-Contained),而且不會干擾其他應用程式。

  • 安全性權限 Windows Installer 部署需要系統管理權限,並且只允許有限的使用者進行安裝;而 ClickOnce 部署可讓非系統管理員的使用者進行安裝,並且僅授與應用程式所必要的那些「程式碼存取安全性」權限。

在過去,這些問題有時會讓開發人員決定建立 Web 應用程式而非 Windows 架構應用程式,雖然安裝方便,但是卻犧牲了 Windows Form 的豐富使用者介面和回應速度。不過,在使用 ClickOnce 部署的應用程式中,您可以同時擁有這兩種最佳技術。

ClickOnce 部署概觀

Windows Installer 部署

 

Windows Installer 部署可讓您建立安裝程式套件散發給使用者,而使用者會執行安裝程式,逐步執行精靈安裝應用程式。這是藉由將「安裝」專案加入至方案中達成的。在建置時,專案便會建立可散發給使用者的安裝檔案,使用者則會執行安裝檔案,並會逐步執行精靈安裝應用程式。

下列主題將幫助您更快熟悉 Windows Installer 部署。

Windows Installer 部署

安裝及解除安裝服務

 

若要手動安裝您的服務
  1. 存取專案的編譯可執行檔所在的目錄。

  2. 在命令列中,以您的專案輸出為參數執行 InstallUtil.exe。在命令列中輸入下列程式碼:

    複製

    installutil yourproject.exe





HOW TO:安裝及解除安裝服務

ProjectInstaller

 

使用 Visual Studio .NET 可以讓 .NET Framework 更容易運用。Visual Studio .NET 可以幫助您建立 Windows 服務 (以安裝程式完成)、監視檔案系統的變更,以及寫入事件日誌。這些工作都會使用設計工具與元件完成,而不需要撰寫程式碼。例如,要在服務專案中加入安裝程式,只需選取服務設計工具介面,然後按一下 [屬性] 視窗底部的 [加入安裝程式] (請參閱圖 3)。這樣就會加入稱為 ProjectInstaller.vb 的新模組,它包含了安裝服務需要的所有程式碼。

搭配 Visual Basic .NET 使用 .NET Framework

如何手動重建效能計數器程式庫值 InstallUtil

 

若要解決這個問題,系統中心 Manager 2007 中的,您必須重新安裝。NET Framework 組件,建立 [效能] 計數器。若要這樣做,請使用 /i 選項中的。NET 架構安裝程式工具 (Installutil.exe) 重新安裝下列組件:

  • Microsoft.Mom.ConfigService.dll
  • Microsoft.Mom.Sdk.ServiceDataLayer.dll
  • Microsoft.Mom.DatabaseWriteModules.dll
  • Microsoft.EnterpriseManagement.HealthService.Modules.DataWarehouse.dll
例如,在命令提示字元中輸入下列命令,並在每一行命令之後按 ENTER:

InstallUtil Microsoft.Mom.ConfigService.dll /i
InstallUtil Microsoft.Mom.Sdk.ServiceDataLayer.dll /i
InstallUtil Microsoft.Mom.DatabaseWriteModules.dll /i
InstallUtil Microsoft.EnterpriseManagement.HealthService.Modules.DataWarehouse.dll /i

如何手動重建效能計數器程式庫值

安裝程式與合併模組的建議

 

Visual Studio 讓您建立兩種不同類型的安裝程式:Windows Installer (.msi) 和合併模組 (.msm)。Windows 安裝程式是用來安裝應用程式及檔案至另一台電腦上,而合併模組是用來安裝多重應用程式所共用的元件。

兩種類型的主要區別為訴求對象的不同。應用程式的使用者會直接使用的任何檔案 (如可執行檔、文件及 HTML 網頁) 應封裝於 Windows 安裝程式內。只能由開發者使用的檔案 (如 DLL、控制及資源) 應封裝於合併模組,然後經由開發者封裝到 Windows 安裝程式上,再提供給一般使用者。

安裝程式與合併模組的建議事項

合併模組專案

[合併模組] 專案讓您建立可重複使用的安裝元件。就如同動態連結程式庫能讓您在應用程式間分享程式碼一樣,合併模組能讓您在 Windows 安裝程式間分享安裝程式碼。

合併模組 (.msm 檔) 是一個包含安裝元件所需的所有檔案、資源、登錄項目及安裝邏輯的單獨套裝。合併模組無法單獨安裝,必須在 Windows Installer (.msi) 檔案內容中使用。

合併模組能讓您擷取一特定元件的所有相依性,以確保安裝正確版本。一旦您散發了合併模組就無法再做修改,而應為元件的每個後續版本建立新的合併模組。

為了避免版本問題,多重應用程式所共用的元件或檔案都應該使用合併模組。

合併模組專案

管理多種程式語言元件方案在 Visual Basic 2005 或 Visual Basic.NET 中

 

管理多種程式語言元件方案
本文將告訴您,如何建立包含下列三個專案的方案:
  • 一個小型應用 Microsoft Visual Basic 2005 或 Microsoft Visual Basic.NET Windows 程式在其他兩個專案類別中所使用的方法。
  • Visual C# 類別庫專案,具有方法,存取北風貿易資料庫,並傳回一個資料集。
  • Visual Basic 2005 或 Visual Basic.NET 類別庫的專案,具有方法,會採用字串的 陣列清單 物件,並傳回串連藉由使用 StringBuilder 類別的執行個體的單一字串。

如何管理多種程式語言元件方案在 Visual Basic 2005 或 Visual Basic.NET 中

在檔案系統編輯器中新增及移除資料夾

 

在預設情況下,[檔案系統編輯器] 會顯示一套標準資料夾,代表目標電腦上的資料夾結構。其他的標準資料夾 (做為參考之特殊資料夾),也可依需要加入至部署專案。如需詳細資訊,請參閱特殊資料夾和自訂資料夾

您也可以加入自己的最上層自訂根資料夾,或是在任何最上層資料夾下加入子資料夾。

HOW TO:在檔案系統編輯器中新增及移除資料夾

特殊資料夾和自訂資料夾

 

特殊資料夾和自訂資料夾

特殊資料夾在 [檔案系統編輯器] 內代表預先定義的 Windows 資料夾。Windows 資料夾的實體位置可能會在每部電腦上有所不同。例如,系統資料夾可能在一部電腦上位於 C:\Windows,在另一部電腦位於 D:\Windows,在第三部電腦則位於 C:\Winnt。

特殊資料夾和自訂資料夾

檔案系統編輯器

檔案系統編輯器。使用這個編輯器時,您可以自訂使用者桌面和 [開始] 功能表,並將檔案及捷徑加入應用程式資料夾中。

Microsoft Corporation

.NET 部署手冊

 

Mic

簡介
.NET Framework 的概觀
建立部署專案計畫
Visual Studio .NET 中的部署專案
部署 .NET Framework
伺服器端的部署
用戶端的部署
部署 Web 服務
部署 .NET 應用程式所用的 SQL Server 資料庫
摘要

rosoft Corporation

建立 Windows 服務 Service 專案

 

C#.NET][VB.NET] 如何建立 Windows 服務 Service 專案

Service是在Windows背景執行的組件(Assembly),不需要任何與使用者互動的操作介面,記得之前在VB6時代也有寫過Service,那時是用NTSVC.ocx,而現在.NET Framework 也提供了相關的類別,功能更是強大,可以讓人省去不少開發的時間。

[C#.NET][VB.NET] 如何建立 Windows 服務 Service 專案 - 余小章 @ 大內殿堂- 點部落

部署功能的自訂動作編輯器

項目

說明

安裝

在所有檔案都已安裝後,會在安裝的安裝階段結束時,執行置於此節點之下的自訂動作。

認可

會在安裝的認可階段結束 (在安裝階段完成且沒有發生錯誤時發生) 時,執行置於此節點之下的自訂動作。

復原

會在安裝的復原階段結束 (在發生安裝錯誤時觸發) 時,執行置於此節點之下的自訂動作。

解除安裝

會在安裝的解除安裝階段結束 (在解除安裝應用程式時發生) 時,執行置於此節點之下的自訂動作。

自訂動作編輯器

自訂動作編輯器

Uninstall 會復原由 Install 所做的改變

 

在安裝失敗的情況下,來源的安裝會復原先前安裝的服務。

如果服務正在執行,則 Uninstall 方法會嘗試停止該服務。 不論這個成功與否,Uninstall 會復原由 Install 所做的改變。 如果建立新來源以記錄事件,則會刪除該來源。

ServiceInstaller 類別 (System.ServiceProcess)

2011年8月11日 星期四

Try Exception 屬性 (System)

名稱

說明

Data

取得由索引鍵/值組所組成的集合,提供關於此例外狀況的額外使用者定義資訊。

HelpLink

取得或設定與這個例外狀況相關聯說明檔的連結。

HResult

取得或設定 HRESULT,它是指派給特定例外狀況的編碼數值。

InnerException

取得造成目前例外狀況的 Exception 執行個體。

Message

取得描述目前例外狀況的訊息。

Source

取得或設定造成錯誤的應用程式或物件的名稱。

StackTrace

取得呼叫堆疊上之立即框架的字串表示。

TargetSite

取得擲回目前例外狀況的方法。

Exception 屬性 (System)

VB.NET控制項事件程序中的引數-sender、 e

 

當程式想要判斷引發事件的物件是那一個的時候, 就會使用到sender參數, 而e參數就更常用了, 例如處理滑鼠左鍵按下的事件時, 就可以利用e參數得知滑鼠點中的座標

VB.NET控制項事件程序中的引數

逐步解說:建立支援複雜資料繫結的使用者控制項

 

在 Windows 應用程式中顯示表單的資料時,您可以從 [工具箱] 中選擇現有的控制項,但如果應用程式需要標準控制項中沒有的功能時,您也可以撰寫自訂控制項。本逐步解說將示範如何建立實作 ComplexBindingPropertiesAttribute 的控制項。實作 ComplexBindingPropertiesAttribute 的控制項會包含可繫結至資料的 DataSource 和 DataMember 屬性。這類控制項與 DataGridViewListBox 很相似。

逐步解說:建立支援複雜資料繫結的使用者控制項

Windows Form 視覺繼承

在某些情況下,您可能會決定讓某個專案呼叫某個表單,且該表單類似您過去專案中所建立的表單。 或者,您可建立包含各種設定 (例如浮水印或特定的控制項配置) 的基本表單,以便於往後專案中使用,而每次的重複動作都包含對原始表單範本所做的修改。 表單的繼承 (Inheritance) 可以讓您建立基底表單並從中進行繼承,並且加以修改,不過可同時保留任何您需要的原始設定。

您可以使用程式設計方式或使用 Visual 繼承選取器建立衍生之類別的表單。

Windows Form 視覺繼承

修改基底表單外觀的效果

 

在應用程式的開發過程中,您可能必須經常變更供該專案 (或其他專案) 內其他表單繼承的基底表單的外觀。

包含基底表單的專案建置完成時,基底表單外觀在設計階段的變更 (屬性的設定或控制項的增刪) 會反映至繼承的表單上。 僅儲存基底表單的變更是不夠的。 若要建置專案,請從 [建置] 功能表中選擇 [建置]。

修改基底表單外觀的效果

顯示強制回應和非強制回應 Windows Form

 

若要將表單以強制回應對話方塊顯示

  • 呼叫 ShowDialog 方法。

顯示強制回應和非強制回應 Windows Form

2011年8月10日 星期三

使用區域變數視窗

使用區域變數視窗

Visual Studio .NET 2003

[區域變數] 視窗中顯示出目前內容的區域變數。

若要顯示區域變數視窗

  • 請在 [偵錯] 功能表中選擇 [視窗],然後按一下 [區域變數]。(偵錯工具必須正在執行或處於中斷模式)。

預設的內容是含目前執行位置的函式。您可以選擇在 [區域變數] 視窗中顯示的替代內容。

使用區域變數視窗

逐步解說:使用 Visual C# 繼承 Windows Form 控制項

  1. 在 [檔案] 功能表上指向 [新增],然後按一下 [專案] 以開啟 [新增專案] 對話方塊。
  2. 從 [C# 專案] 清單選取 [Windows 控制項程式庫] 專案範本,然後在 [名稱] 方塊中輸入 ValueButtonLib

:

:

 

使用 Visual C# 繼承 Windows Form 控制項

逐步解說:使用 Visual C# 繼承 Windows Form 控制項

VC++寫DLL給VC#使用

這次會這樣測試是因為未來兩個月內我會將我現在手頭用VC++寫的分析程式(目前還未完成)做成DLL(Dynamic Link Library)檔去和學長用C#寫的介面做連結

VC++寫DLL給VC#使用

VC++寫DLL給VC#使用 @ ~心事集散地~ :: 痞客邦 PIXNET ::

2011年8月6日 星期六

cross-language interoperability

 

CLR可說是.NET最核心的部分。從字面上就可以知道,它是一個可以讓不同語言寫成的應用程式都能正常運作的執行環境,這又被稱做 cross-language interoperability (跨語言的互通性)。CLR是如何達到跨語言的互通呢?若一個語言的編譯器想要使開發出來的.NET應用程式能在CLR中執行,它必須遵守Common Language Specification(共通語言規範,CLS)的規則。也就是說,不管是誰要自己寫一個支援.NET的編譯器,都必須遵守這規則。這樣,我們產生出來的應用程式就可以跟所有其他的.NET應用程式一起執行、交互使用。

微軟電子書苑