成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解C#組件開發的來龍去脈

開發 后端
我們這里將介紹C#組件開發的來龍去脈,主要是在Visual Studio .NET環境下,希望本文能對大家有所幫助。

C#組件開發首先要了解組件的功能,以及組件為什么會存在。在Visual Studio .NET環境下,將會有新形式的C#組件開發。

組件的功能

微軟即將發布的 Visual Studio .NET 將使程序開發人員獲得一個集成開發環境,它不但為開發傳統的 C/C++ 應用程序,而且也為令人振奮的Microsoft .NET 組件提供了豐富的工具。這些以管理代碼編寫、在通用語言運行時構建的組件向開發人員提供了一個全新的混合開發環境,即象 Microsoft Visual Basic 一樣容易,而同時又提供了強大的低級編程能力,與 ATL 或 MFC 更加相關。隨著以生產效率為中心的管理環境的到來,它可與傳統 COM 組件很好地協同工作。開發人員可以將更多時間花在構建大型組件上,而不用再為內存泄漏、安全和頭文件擔心。

除了提供Microsoft .NET Framework組件的開發外,Visual Studio.NET (VS .NET) 還擁有很多工具,可以讓組件利用 VS .NET 中設計器架構的優勢來設計出在外觀和性能上與 VS .NET 所附帶組件相近的產品。在開發管理組件時,在 VS.NET 設計器中獲得的所有特性都使用組件本身的 .NET Framework,從而獲得設計時與運行時組件之間的緊密集成。

組件是什么

很顯然, Microsoft . NET Framework 組件很容易編寫。 讓它們與Visual Studio . NET 設計器一同工作的唯一要求是,它們實現 System.ComponentModel.IComponent,即通常表明繼承于IComponent的默認應用。IComponent使組件可跟蹤設計時的信息(如它的容器組件或名稱)或訪問設計器提供的服務。

讓我們編寫一個簡單的C#組件開發,它的形式如下:

  1. using System;   
  2. using System.ComponentModel;   
  3. public class BoolTracker : Component {   
  4. private bool state;   
  5. private EventHandler handler;   
  6. private static object EventValueChanged = new object();   
  7.  
  8. public BoolTracker() {   
  9. }   
  10.  
  11. public bool Value {   
  12. get {   
  13. return state;   
  14. }   
  15. set {   
  16. if (this.state != value) {   
  17. this.state = value;   
  18. OnValueChanged(new EventArgs());   
  19. }   
  20. }   
  21. }   
  22.  
  23. public void AddOnValueChanged(EventHandler h) {   
  24. handler= (EventHandler)Delegate.Combine(handler, h);   
  25. }   
  26.  
  27. protected virtual void OnValueChanged(EventArgs e) {   
  28. if (handler != null) {   
  29. handler(this, e);   
  30. }   
  31. }   
  32.  
  33. public void RemoveOnValueChanged(EventHandler h) {   
  34. handler = (EventHandler)Delegate.Remove(handler, h);   
  35. }   
  36.  
  37. }  

顯然,這個組件不完成什么功能,但會將它置入 Visual Studio.NETWin 窗體設計器或組件設計器中,即可從屬性瀏覽器中看見它有名稱,也有一個稱為“Value”的屬性,使用下拉箭頭可以將值設置為True或False,當值在 True 和 False 之間切換時,可以觸發事件OnValueChanged。

對于設計器來說,組件只是我們要說明的一半,最重要的部分是屬性,它組成了元數據,元數據是關于類、屬性、事件等的信息。讓我們以Value屬性為例。僅作為屬性,就已經有相關的元數據了,例如類型(布爾)、行為(讀/寫)或名稱(“Value”)。使用“反射”對基本元數據進行檢索,即通用語言運行時允許用戶在運行時檢查對象的類型、基本類型、屬性、方法、構造器、字段和訪問級別。所有這些信息都被認為是元數據。

定制元數據

定制元數據包括可添加到類或類成員的任意信息段(字段、屬性或方法),實際上是類型本身被特定客戶所識別。對于Visual Studio .NET設計器來說,定制元數據構成所有可擴展性的基礎。VS .NET 設計器理解的所有元數據屬性都基于一名為System.ComponentModel.Member Attribute的類。它提供一個基本類,因此開發器所關心的屬性可以通過它們的類型快速標識。

通過一個典型實例可以更容易理解這一概念。比如我們不希望 Value屬性在屬性瀏覽器中顯示。我們可添加一個元數據屬性 System.ComponentModel.BrowsableAttribute 來控制一個屬性是否可被瀏覽。

  1. [Browsable(false)]   
  2. public bool Value {   
  3.  get {   
  4. return state;   
  5. }   
  6.  set {   
  7.  if (this.state != value) {   
  8.  this.state = value;   
  9.  OnValueChanged(new EventArgs());   
  10. }   
  11.  }   
  12. }  

在指定屬性時,可以將“BrowsableAttribute”縮略為“Browsable”。由 C# 編譯器為我們添加“Attribute”一詞。唯一的限制是如果指定了屬性值,它必須與構造器的屬性類型相符,且該數值必須是常量。在本例中,BrowsableAttribute 有一個單一的布爾型參數“Browsable”的構造器,編譯器把這個元數據屬性綁定到該構造器并創建一個屬性類的實例。如果屬性類瀏覽器獲得了這個對象,它將枚舉出該對象的屬性并忽略“browsable”屬性,因為它以此屬性為標簽。因此看起來該對象沒有屬性。BrowsableAttribute 也可應用于事件。

Microsoft .NET Framework 擁有豐富的屬性集來控制設計器如何使用組件。這里是其中一些有用屬性的列表,使您在以后的閱讀中更能理解其含義:

屬性名 說明BrowsableAttribute控制屬性或事件是否顯示在屬性瀏覽器中。BindableAttribute確定屬性是否適合數據綁定器進行綁定。CategoryAttribute指定屬性在屬性瀏覽器中應分組的類別(“Appearance”,“Layout”, “Behavior”,“ Misc”等等)。DefaultEventAttribute/ DefaultPropertyAttribute 指定對象的默認事件或屬性。HelpAttribute 指定屬性或事件的幫助文件和主題。LicenseProviderAttribute 指向為組件提供許可證信息的 LicenseProvider。MergablePropertyAttribute 在屬性瀏覽器中當多個組件被瀏覽和選中時,允許或阻止包含某屬性。PersistableAttribute 確定在 Win Forms Designer 或 ComponentDesigner 等可視設計器中生成代碼時,屬性值是否應與代碼保持一致。PersistContentsAttribute確定代碼生成是否應回歸到對象的非數值類型屬性以及是否保持代碼與屬性值一致。ICollection 屬性類型是這一應用的典型示例。ShowInToolboxAttribute 確定是否允許在工具框中使用這一組件。ToolBoxItemAttriubte 指定從工具框中創建類時應使用的 ToolboxItem類型。

【編輯推薦】

  1. 詳解C#中不同類的類型
  2. 淺談C#中標準Dispose模式的實現
  3. C#選擇正確的集合進行編碼
  4. C# 4.0新特性:協變與逆變中的編程思想
  5. C#應用Attribute特性 代碼統計分析
責任編輯:彭凡 來源: study.qqcf.com
相關推薦

2009-09-17 16:34:24

C#組件類

2009-08-25 17:41:51

C#開發排序算法

2009-10-20 14:58:15

Javascript事

2009-09-22 17:53:32

C# COM組件開發

2009-08-25 17:02:20

C#串口操作

2009-09-07 06:18:57

C#窗體設計器

2009-08-31 09:41:05

C#反射靜態方法開發

2009-11-20 09:10:21

C#開發環境

2009-08-31 16:47:39

C#接口的定義

2009-01-19 10:26:02

C#Namespace.NET

2009-09-07 16:13:56

C# MessageB

2009-07-30 18:20:21

C#繼承

2009-08-24 11:23:41

C# TimeLabe

2009-09-01 16:07:04

C#命名規約

2009-08-14 17:09:48

C#引用類型

2009-08-21 09:14:47

C# Excel CO

2009-09-02 16:43:55

C#調用Excel的C

2009-08-31 15:34:45

常用操作C# TreeView

2009-09-02 19:12:37

C#遞歸

2009-09-02 11:02:57

C#動態數組
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品毛片在线 | 亚洲免费视频在线观看 | 中文字幕国产一区 | 黄色av网站在线免费观看 | 色啪网 | 亚洲精选久久 | 欧美性一区二区三区 | 午夜电影一区二区 | 九九热这里只有精品在线观看 | 久草99 | 99视频在线 | 久久婷婷色 | 久久免费精品 | 日韩国产一区二区三区 | 狠狠色香婷婷久久亚洲精品 | 97福利在线 | 亚洲第一av | 亚洲国产精品久久 | 成人亚洲一区 | 欧美久久电影 | 一区二区在线免费观看 | 欧美日韩一区二区三区四区五区 | 完全免费av在线 | 91福利网| 欧美性高潮 | 波多野结衣中文视频 | 日韩一区二区三区视频 | 免费在线毛片 | 人人射人人插 | 亚洲www| 国产一级在线视频 | 久久国产一区二区 | 久久中文字幕一区 | 国产精品亚洲二区 | 另类专区成人 | 亚洲福利视频一区二区 | 青青草网站在线观看 | 午夜一区| 一区二区电影网 | 一级毛片视频 | 国产美女在线观看 |