C#入門


C#基礎,以下是一些學習筆記

.net/donet :一般指.Net Framework框架.一種平臺,一種技術
c#:一種編程技術,可以開發基於.net平臺的應用
手機開發 wp7 移動開發趨勢 微軟主發 微軟最擅長後來居上 微軟是最大的
wp7已經有將近400家,這已經在爲wp7在儲備開發了
wince用於單片機,
C/S:客戶機/服務器模式 Client/Server
B/S:瀏覽器/服務器模式 Browser/Server
平時注意記憶一些快捷鍵
解決方案可以包括多個項目,項目可以包括多個文件,文件中是我們的程序
重置開發環境:工具->導入導出->重置當前設置->不保存->C#
解決方案選擇當前操作爲啓動項目
加載和卸載項目,重載,可以在生成解決方案中實現屏蔽其他的錯誤
home,end,shift h,shift e,ctril h,ctril e
大部分對話框的內容是可以複製的,直接按ctril c,沒反應但已經複製了
#region 和 #endregion 可以使以下代碼可以進行分解成塊
#region //練習第一題
#endregion

Framework構架
.net Framework
{
  .net Framework類庫
  {
 web窗體; web Service; Winforms

  *****ado.netXML************

 *********基本框架類************
 }
  CLR公共語言運行時
 {
  CLS公共語言規範
  CTS通用類型系統
 }
}

MSIL 微軟  中間語言

GLR 執行IL ,比如在點擊exe文件,馬上被windows託管,翻譯

CLR(JIT即時編譯器 CLS公共語言規範 CTS通用類型系統)公共語言運行時

double精度問題,有效數字只有15-16,但能達到300位大數字

decimal小數有28,有效數字,貨幣問題使用

deciaml money;

money = 1.284m;

變量的命名規則:

必須以"字母"_@

後面可以跟任意"字母",字數,下劃線.

定義變量時要有意義

首字母要小寫,下面單詞首字母大寫

佔位符可以重複使用

轉義字符

當我們需要在字符串中輸入一些特殊字符時,你如:半角引號,換行,退格.

mdsn查詢轉義字符 \n換行 \b退格 \ttab(多個空格,行與行對其) @不進行轉義字符

不丟失精度的轉換才能自動轉換

age++,age=age+1;效率高得多

age+=3;age=age+3;效率高

短路運算: int a=10,b=5; bool result=++a>50 && ++b>1; 打印結果 a=11;b=5;

原因:邏輯與運算,只有當前面的條件爲true是纔會執行後面的語句;邏輯或,同理,false的時候執行後面的語句.

switch:一般 只能用於的等值的判斷

if-else:一般用於範圍的判斷

switch(表達式/變量)

{

case 1: 語句塊1;

break;

case 2: 語句塊2;

break;

default: 語句塊;

break;

}

 下面是自己學習C#書籍的筆記

基礎概念:
  • Microsoft 中間語言(Microsoft Intermediate Language MSIL 或簡稱爲IL)
  • 通用類型系統 (Common Type SystemCTS)
  • 公共語言規範 (Common Language SpecificationCLS)
  • 公共語言運行庫(Common Language Runtime,CLR)
C#就其本身而言只是一種語言,儘管它是用於生成面向 .NET環境的代碼,但它本身不是 .NET的一部分。.NET支持的一些特性, C#並不支持。而C#語言支持的另一些特性, .NET卻不支持( 例如運算符重載 )

一. 公共語言運行庫(CLR)
     .net中的編譯
  • 把源代碼編譯爲 Microsoft中間語言(IL)
  • CLRIL 編譯爲平臺專用的代碼
     個人理解摘記:運行代碼是四層構架:
  1. 第一層各種語言代碼
  2. 第二層轉換爲統一的MSIL語言代碼
  3. 第三層根據不同平臺的CLR標準把IL語言代碼轉換爲平臺代碼
  4. 第四層編譯執行(這裏不太清楚了就,呵呵)
     Microsoft中間語言與Java字節代碼共享一種理念:它們都是低級語言,語法很簡單(使用數字代碼,而不是文本代碼),可以非常快速地轉換爲內部機器碼。對於代碼來說,這種精心設計的通用語法有很重要的優點:平臺無關性、提高性能和語言的互操作性。
     注意 .NET的平臺無關性目前只是一種可能,因爲在編寫本書時, .NET只能用於Windows 平臺,但人們正在積極準備,使它可以用於其他平臺 (參見Mono 項目,它用於實現 .NET的開放源代碼,參見http://www.go-mono.com/)。(平臺無關)
     前面把ILJava做了比較,實際上,ILJava字節代碼的作用還要大IL總是即時編譯的(稱爲JIT編譯),而Java字節代碼常常是解釋性的Java的一個缺點是,在運行應用程序時,把Java字節代碼轉換爲內部可執行代碼的過程會導致性能的損失(但在最近,Java在某些平臺上能進行JIT編譯)
     JIT編譯器並不是把整個應用程序一次編譯完 (這樣會有很長的啓動時間 ),而是隻編譯它調用的那部分代碼 (這是其名稱由來)
     傳統的編譯器會優化代碼,但它們的優化過程是獨立於代碼所運行的特定處理器的。相反, JIT編譯器不僅可以進行Visual Studio 6所能完成的優化工作,還可以優化代碼所運行的特定處理器。(提高性能)
     使用IL不僅支持平臺無關性,還支持語言的互操作性。簡而言之,就是能將任何一種語言編譯爲中間代碼,編譯好的代碼可以與從其他語言編譯過來的代碼進行交互操作。(語言互操作性)
     C++也可以編譯成中間語言, 具體#using <mscorlib.dll>,參考書,不細講

     面向 .NET的所有語言在邏輯上都需要支持 IL的主要特徵:
  • 面向對象和使用接口
  • 值類型和引用類型之間的巨大差別
  • 強數據類型
  • 使用異常來處理錯誤
  • 使用特性 (attribute)

——————————————————————————————————————————————————————
二.面向對象和使用接口
     語言互操作性的真正含義是用一種語言編寫的類應能直接與用另一種語言編寫的類通信。特別是:
  • 用一種語言編寫的類應能繼承用另一種語言編寫的類。
  • 一個類應能包含另一個類的實例,而不管它們是使用什麼語言編寫的。
  • 一個對象應能直接調用用其他語言編寫的另一個對象的方法。
  • 對象 (或對象的引用)應能在方法之間傳遞。
  • 在不同的語言之間調用方法時,應能在調試器中調試這些方法調用,即調試不同語言編寫的源代碼。
     令人驚訝的是, .NET和中間語言已經實現了這個目標。在調試器上調試方法時, Visual Studio IDE提供了這樣的工具 (不是CLR 提供的)
     
     中間語言也有數據存儲的規範:引用類型的實例總是存儲在一個名爲 "託管堆" 的內存區域中,值類型一般存儲在堆棧中 (但如果值類型在引用類型中聲明爲字段,它們就內聯存儲在堆中 )

     中間語言的一個重要方面是它基於強數據類型.特別是中間語言一般不允許對模糊的數據類型執行任何操作.
——————————————————————————————————————————————————————
相異值類型和引用類型  中間語言
     對於值類型,變量直接保存其數據,而對於引用類型,變量僅保存地址,對應的數據可以在該地址中找到。
   引用類型的實例總是存儲在一個名爲"託管堆"的內存區域中,值類型一般存儲在堆棧中(但如果值類型在引用類型中聲明爲字段,它們就內聯存儲在堆中)
——————————————————————————————————————————————————————
  • 中間語言的一個重要方面是它基於強數據類型。
  • 特別是中間語言一般不允許對模糊的數據類型執行任何操作。
 

儘管強迫實現類型的安全性最初會降低性能,但在許多情況下,我們從.NET提供的、依賴於類型安全的服務中獲得的好處更多。這些服務包括:

 

●  語言的互操作性

 

●  垃圾收集

 

●  安全性

 

●  應用程序域

 
     CTS(通用類型系統)
graphic

不用深入討論 CLS規範。在一般情況下,CLS C#代碼的影響不會太大,因爲 C#中的非CLS 兼容特性非常少。
——————————————————————————————————————————————————————

2. 垃圾收集
     垃圾收集器用來在.NET中進行內存管理,特別是它可以恢復正在運行中的應用程序需要的內存。到目前爲止,Windows平臺已經使用了兩種技術來釋放進程向系統動態請求的內存:
·  完全以手工方式使應用程序代碼完成這些工作。(C++、等低級高性能語言使用的內存管理方法)
·  讓對象維護引用計數。
     .NET運行庫採用的方法是垃圾收集器 ,這是一個程序,其目的是清理內存,方法是所有動態請求的內存都分配到堆上(所有的語言都是這樣處理的,但在.NET中,CLR維護它自己的託管堆,以供.NET應用程序使用),當.NET檢測到給定進程的託管堆已滿,需要清理時,就調用垃圾收集器。垃圾收集器處理目前代碼中的所有變量,檢查對存儲在託管堆上的對象的引用,確定哪些對象可以從代碼中訪問-- 即哪些對象有引用。沒有引用的對象就不能再從代碼中訪問,因而被刪除。Java就使用與此類似的垃圾收集系統。
     垃圾收集器的一個重要方面是它的不確定性。換言之,不能保證什麼時候會調用垃圾收集器: .NET運行庫決定需要它時,就可以調用它 (除非明確調用垃圾收集器 )。但可以重寫這個過程,在代碼中調用垃圾收集器。
——————————————————————————————————————————————————————
     3. 安全性
.NET很好地補足了 Windows提供的安全機制,因爲它提供的安全機制是基於代碼的安全性,而 Windows僅提供了基於角色的安全性。
     詳細P14

——————————————————————————————————————————————————————
     4. 應用程序域
     應用程序域是 .NET中的一個重要 技術改進,它用於減少運行應用程序的系統開銷 ,這些應用程序需要與其他程序分離開來,但仍需要彼此通信。
     應用程序域是分離組件的一種方式 ,它不會導致因在進程之間傳送數據而產生的性能問題。其方法是把任何一個進程分解到多個應用程序域中,每個應用程序域大致對應一個應用程序,執行的每個線程都運行在一個具體的應用程序域中,如圖1-3所示。(簡單理解就是,進程之間通信很複雜,不安全,因此.net處理方法:在同一個進程中,使用應用程序域來存放不同的程序,這樣的通信就是在進程內,而且因爲.net是強類型,安全有保證,除非使用指針,一般是不會影響其他程序運行的。)
     
——————————————————————————————————————————————————————
1.3.4  通過異常處理錯誤
     .NET Framework 可以根據異常使用相同的機制處理錯誤情況
     .NET提供了一種基礎結構,讓面向 .NET的編譯器支持異常處理。特別是它提供了一組 .NET類來表示異常,
——————————————————————————————————————————————————————
1.3.5  特性的使用
     特性(attribute)是使用C++編寫COM組件的開發人員很熟悉的一個功能(MicrosoftCOM接口定義語言(Interface Definition LanguageIDL)中使用特性)。特性最初是爲了在程序中提供與某些項相關的額外信息,以供編譯器使用。
     .NET支持特性,因此現在C++C#Visual Basic 2008也支持特性。但在.NET中,對特性的革新是建立了一個機制,通過該機制可以在源代碼中定義自己的特性。這些用戶定義的特性將和對應數據類型或方法的元數據放在一起,這對於文檔說明書十分有用,它們和反射技術一起使用,以根據特性執行編程任務。另外,與.NET的語言無關性的基本原理一樣,特性也可以在一種語言的源代碼中定義,而被用另一種語言編寫的代碼讀取。
——————————————————————————————————————————————————————

1.4  程序集

     程序集 (assembly)是包含編譯好的、面向.NET Framework的代碼的邏輯單元。
     程序集的一個重要特性 是它們包含的元數據描述了對應代碼中定義的類型和方法。程序集也包含描述程序集本身的元數據,這種程序集元數據包含在一個稱爲"程序集清單"的區域中,可以檢查程序集的版本及其完整性。
     ildasm是一個基於Windows的實用程序,可以用於檢查程序集的內容,包括程序集清單和元數據。第17章將介紹ildasm
   有了程序集後,因爲所有的元數據都與程序的可執行指令存儲在一起。注意,即使程序集存儲在幾個文件中,數據也不會出現不同步的問題。這是因爲包含程序集入口的文件也存儲了其他文件的細節、散列和內容,如果一個文件被替換,或者被塞滿,系統肯定會檢測出來,並拒絕加載程序集。
     程序集有兩種類型:共享程序集和私有程序集。
——————————————————————————————————————————————————————

1.4.1  私有程序集

     私有程序集是最簡單的一種程序集類型。私有程序集一般附帶在某個軟件上,且只能用於該軟件。附帶私有程序集的常見情況是,以可執行文件或許多庫的方式提供應用程序,這些庫包含的代碼只能用於該應用程序。
     因爲私有程序集完全是自含式 的,所以安裝它的過程就很簡單。只需把相應的文件放在文件系統的對應文件夾中即可(不需要註冊表項),這個過程稱爲"0影響(xcopy)安裝"
——————————————————————————————————————————————————————

1.4.2  共享程序集

     共享程序集是其他應用程序可以使用的公共庫。因爲其他軟件可以訪問共享程序集,所以需要採取一定的保護措施來防止以下風險:
·  名稱衝突 ,另一個公司的共享程序集執行的類型與自己的共享程序集中的類型同名。因爲客戶機代碼理論上可以同時訪問這些程序集,所以這是一個嚴重的問題。爲了避免名稱衝突,共享程序集應根據私鑰加密法指定一個名稱 ( 私有程序集只需要指定與其主文件名相同的名稱即可 ) 。該名稱稱爲強名 (strong name),並保證其唯一性,它必須由要引用共享程序集的應用程序來引用。
·  程序集被同一個程序集的不同版本覆蓋 -- 新版本與某些已有的客戶機代碼不兼容。
這些問題的解決方法是把共享程序集放在文件系統的一個特定的子目錄樹中,稱爲全局程序集高速緩存 (GAC)

與覆蓋程序集相關的問題,可以通過在程序集清單中指定版本信息來解決,也可以通過同時安裝來解決。
——————————————————————————————————————————————————————

1.4.3  反射

     因爲程序集存儲了元數據,包括在程序集中定義的所有類型和這些類型的成員的細節,所以可以 編程訪問這些 元數據。這個技術稱爲反射,第13章詳細介紹了它們。該技術很有趣,因爲它表示託管代碼實際上可以檢查其他託管代碼,甚至檢查它自己,以確定該代碼的信息。它們常常用於獲取特性的詳細信息,也可以把反射用於其他目的,例如作爲實例化類或調用方法的一種間接方式,如果把方法上的 類名指定爲字符串,就可以選擇類來實例化方法,以便在 運行時調用,而不是在編譯時調用,例如根據用戶的輸入來調用(動態綁定)
——————————————————————————————————————————————————————

1.5  .NET Framework

     .NET基類是一個內容 豐富託管代碼類集合 ,它可以完成以前要通過Windows API來完成的絕大多數任務。這些類派生自與中間語言相同的對象模型,也基於單一繼承性。無論.NET基類是否合適,都可以實例化對象,也可以從它們派生自己的類。
     WinCV是一個基於Windows的實用程序,可以用於瀏覽基類庫中的類、結構、接口和枚舉。本書將在第15章介紹WinCV
——————————————————————————————————————————————————————

1.6  命名空間

     命名空間是 .NET避免類名衝突 的一種方式。
     如果沒有顯式提供命名空間,類型就添加到一個沒有名稱的全局命名空間中。
Microsoft建議 在大多數情況下,都至少要提供 兩個嵌套的命名空間名,第一個是公司名,第二個是技術名稱或軟件包的名稱,而類是其中的一個成員,例如 YourCompanyName.Sales Services.Customer。在大多數情況下,這麼做可以保證類的名稱不會與其他組織編寫的類名衝突。
——————————————————————————————————————————————————————

1.7  C#創建 .NET應用程序

     C#可以用於創建控制檯應用程序
——————————————————————————————————————————————————————

1.7.1  創建ASP.NET應用程序

     ASP是用於創建帶有動態內容 Web 頁面的一種 Microsoft技術。
       ASP也有缺點。服務器端代碼是 解釋性的,ASP文件很難維護 ,不是結構化的, ASP有時開發起來困難,因爲它 不支持錯誤處理和類型檢查。
     1. ASP.NET的特性
ASP.NET頁面是結構化。每個頁面繼承System.Web.UI. Page類,可以重寫在 Page對象的生存期中調用的一系列方法。因爲可以把一個頁面的功能放在有明確含義的事件處理程序中,所以 ASP.NET比較容易理解。
最清楚的是,ASP.NET的後臺編碼功能允許 進一步採用 結構化的方式。 ASP.NET允許把頁面的服務器端功能 單獨放在一個類中,把該類 編譯爲DLL,並把該 DLL放在H-TML 部分下面的一個目錄中。放在頁面頂部的後臺編碼指令將把該文件與其 DLL關聯起來。當瀏覽器請求該頁面時, Web服務器就會在頁面的後臺 DLL中引發類中的事件。
最後,ASP.NET 在性能的提高上非常明顯。傳統的 ASP頁面是和每個頁面請求一起解釋,而 Web服務器是在編譯後高速緩存 ASP.NET頁面。這表示以後對ASP.NET頁面的請求就比 ASP頁面第一次執行的速度快得多。
ASP.NET還易於編寫通過瀏覽器顯示窗體的頁面,這在內聯網環境中會使用。傳統的方式是基於窗體的應用程序提供一個功能豐富的用戶界面,但較難維護,因爲它們運行在非常多的不同機器上。因此,當用戶界面是必不可少的,並可以爲用戶提供擴展支持時,人們就會依賴基於窗體的應用程序。
2. Web窗體
爲了簡化Web 頁面的結構, Visual Studio 2008提供了Web 窗體。它們允許以創建 Visual Basic 6C++ Builder窗口的方式圖形化地建立 ASP.NET頁面;換言之,就是把控件從 工具箱拖放到窗體上,再考慮窗體的代碼,爲控件編寫事件處理程序。在使用 C#創建Web窗體時,就是創建一個 繼承Page基類 C# 類,以及把這個類看作是後臺編碼的 ASP.NET頁面。當然不必使用C#創建 Web窗體,而可以使用Visual Basic 2008或另一種 .NET語言來創建。
3. Web服務器控件
用於添加到Web窗體上的控件與 ActiveX控件並不是同一種控件,它們是 ASP.NET命名空間中的XML標記 ,當請求一個頁面時,Web瀏覽器會動態地把它們轉換爲 HTML和客戶端腳本。Web服務器能以 不同的方式顯示相同的服務器端控件,產生一個對應於請求者特定 Web瀏覽器的轉換 。這意味着現在很容易爲 Web頁面編寫相當複雜的用戶界面,而不必擔心如何確保頁面運行在可用的任何瀏覽器上,因爲 Web窗體會完成這些任務。
可以使用C#VisualBasic2008擴展Web窗體工具箱。創建一個新服務器端控件,僅是執行.NETSystem.Web.UI.WebControls.WebControl 類而已。
4. XML Web服務
目前,HTML 頁面解決了 World Wide Web上的大部分通信問題 。有了XML ,計算機就可以用一種 獨立於設備的格式,在 Web上彼此通信。將來,計算機可以使用 WebXML 交流信息,而不是專用的線路和專用的格式,例如 EDI (Electronic Data Interchange) XML Web服務是爲面向 Web的服務而設計的,即遠程計算機彼此提供可以分析和重新格式化的動態信息,最後顯示給用戶。 XML Web服務是計算機給Web上的其他計算機以 XML格式顯示信息的一種便利方式。
在技術上,.NET上的 XML Web服務是給請求的客戶返回 XML而不是HTML ASP.NET頁面。這種頁面有後臺編碼的 DLL,它包含了派生自WebService類的類。 Visual Studio 2008 IDE提供的引擎簡化了 Web服務的開發。
公司選擇使用XML Web服務主要有兩個原因。第一是因爲它們 依賴於HTTP,而 XML Web服務可以把現有的網絡 (HTTP)用作傳輸信息的媒介。第二是因爲 XML Web服務使用XML ,該數據格式是自我描述的、非專用的、獨立於平臺的。
——————————————————————————————————————————————————————

1.7.3  使用Windows Presentation Foundation(WPF)

     有一種最新的技術叫做 Windows Presentation Foundation(WPF) WPF在建立應用程序時使用 XAMLXAML 表示可擴展的應用程序標記語言 (Extensible Application Markup Language) 
     XAML是用於創建窗XML聲明,它代表 WPF應用程序的所有可視化部分和操作。雖然可以編程利用 WPF應用程序,但WPF是邁向 聲明性編程的一步,而聲明性編程是編程業的 趨勢。聲明性編程是指,不是利用編譯語言,如 C#VB Java,通過編程來創建對象,而是通過 XML類型的編程來聲明所有的元素。
——————————————————————————————————————————————————————

1.7.6  Windows Communication Foundation(WCF)

通過基於Microsoft 的技術,可以採用許多方式將 數據和服務從一處 移動到另一處。例如,可以使用 ASP.NET Web服務、.NET Remoting Enterprise Services和用於初學者的 MSMQ。應採用哪種技術?這要考慮具體要達到的目標,因爲每種技術都適合於不同的場合。
     因此, Microsoft把所有這些技術集成在一起,放在 .NET Framework 3.03.5 中。現在只有一種移動數據的方式 -- Windows Communication Foundation(WCF) WCF允許建立好服務後,只要修改配置文件,就可以用多種方式提供該服務 (甚至在不同的協議下) WCF是一種連接各種系統的強大的新方式。

——————————————————————————————————————————————————————
2.8.2  命名空間的別名
     using alias = NamespaceName;
     alias::NamespaceExample NSE = new alias::NamespaceExample();
     注意命名空間別名的 修飾符是::
——————————————————————————————————————————————————————


——————————————————————————————————————————————————————

3.8  擴展方法

有許多方法擴展類。如果有類的源代碼,繼承(如第 4章所述)就是給對象添加功能的好方法。但如果沒有源代碼,該怎麼辦?此時可以使用擴展方法,它允許改變一個類,但不需要類的源代碼。

——————————————————————————————————————————————————————


——————————————————————————————————————————————————————

7.1  委託

     當要把方法 傳送其他方法 時,需要使用委託。
     · 事件-- 一般是通知代碼發生了什麼事件。GUI編程主要是處理事件。在發生事件時,運行庫需要知道應執行哪個方法。這就需要把 處理事件 方法傳送爲委託 的一個參數 。這些將在本章後面討論。
C C++中,只能提取函數的地址,並傳送爲一個參數。 C是沒有類型安全性的。可以把任何函數傳送給需要函數指針的方法。這種直接的方法會導致一些問題,例如類型的安全性,在進行面向對象編程時,方法很少是孤立存在的,在調用前,通常需要與類實例相關聯。而這種方法並沒有考慮到這個問題。所以 .NET Framework在語法上不允許使用這種直接的方法。如果要傳遞方法,就必須把方法的細節封裝在一種新類型的對象中,即委託。委託只是一種特殊的對象類型,其特殊之處在於,我們以前定義的所有對象都包含數據,而 委託包含的只是 方法的地址
——————————————————————————————————————————————————————

7.1.1  C#中聲明委託

     理解委託的一個要點是它們的類型 安全性非常高。在定義委託時,必須給出它所代表的方法 簽名返回類型 等全部細節。
     理解委託的一種好方式是把委託當作給方法簽名和返回類型指定名稱。
     委託實現爲派生自基類 System. Multicast Delegate的類,System.MulticastDelegate 又派生自基類 System.Delegate
     給定委託的實例可以表示任何類型的 任何對象上的 實例方法 靜態方法-- 只要方法的簽名匹配於委託的簽名即可。
 
——————————————————————————————————————————————————————
7.1.6  匿名方法
     到目前爲止,要想使委託工作,方法必須已經存在(即委託是用方法的簽名定義的)。但使用委託還有另外一種方式:即通過匿名方法。匿名方法是用作委託參數的一個代碼塊。
用匿名方法定義委託的語法與前面的定義並沒有區別。但在實例化委託時,就有區別了。
——————————————————————————————————————————————————————

7.2.1  接收器 的角度討論事件

     事件接收器是指在發生某些事情時被通知的任何應用程序、對象或組件。當然,有事件接收器,就有事件發送器。發送器的作用是 引發事件。發送器可以是應用程序中的另一個對象或程序集,在系統事件中,例如鼠標單擊或鍵盤按鍵, 發送器就是.NET運行庫。注意,事件的發送器並不知道接收器是誰。這就使事件非常有用。
現在,在事件接收器的某個地方有一個方法,它負責處理事件。在每次發生已註冊的事件時,就執行這個事件處理程序。此時就要使用委託了。由於發送器對接收器一無所知,所以無法設置兩者之間的引用類型,而是使用委託作爲中介。發送器定義接收器要使用的委託,接收器將事件處理程序註冊到事件中。連接事件處理程序的過程稱爲封裝事件。封裝 Click事件的簡單例子有助於說明這個過程。
     public delegate void EventHandler(object sender, EventArgs e); //注意這個,這是事件委託
     public Form1()
     {
          InitializeComponent();
          buttonOne.Click += new EventHandler(Button_Click);
     }
     Visual Studio中,注意在輸入+=運算符之後,就只需按下Tab鍵兩次,編輯器就會完成剩餘的輸入工作。在大多數情況下這很不錯。但在這個例子中,不使用默認的處理程序名,所以應自己輸入文本。
     System.Windows.Forms.Button, Text: button1(這個是sender的內容)
我們已經學習了許多概念,但要在接收器中編寫的 代碼量很小 的。記住,編寫事件接收器常常比編寫事件發送器要 頻繁得多。至少在 Windows用戶界面上,Microsoft已經編寫了所有需要的事件發送器 (它們都在.NET 基類中,在 Windows.Forms命名空間中)
——————————————————————————————————————————————————————

7.2.2  生成事件


——————————————————————————————————————————————————————


——————————————————————————————————————————————————————


——————————————————————————————————————————————————————


——————————————————————————————————————————————————————


——————————————————————————————————————————————————————


——————————————————————————————————————————————————————



 

發佈了21 篇原創文章 · 獲贊 3 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章