偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

詳解C#組件開(kāi)發(fā)的來(lái)龍去脈

開(kāi)發(fā) 后端
我們這里將介紹C#組件開(kāi)發(fā)的來(lái)龍去脈,主要是在Visual Studio .NET環(huán)境下,希望本文能對(duì)大家有所幫助。

C#組件開(kāi)發(fā)首先要了解組件的功能,以及組件為什么會(huì)存在。在Visual Studio .NET環(huán)境下,將會(huì)有新形式的C#組件開(kāi)發(fā)。

組件的功能

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

除了提供Microsoft .NET Framework組件的開(kāi)發(fā)外,Visual Studio.NET (VS .NET) 還擁有很多工具,可以讓組件利用 VS .NET 中設(shè)計(jì)器架構(gòu)的優(yōu)勢(shì)來(lái)設(shè)計(jì)出在外觀(guān)和性能上與 VS .NET 所附帶組件相近的產(chǎn)品。在開(kāi)發(fā)管理組件時(shí),在 VS.NET 設(shè)計(jì)器中獲得的所有特性都使用組件本身的 .NET Framework,從而獲得設(shè)計(jì)時(shí)與運(yùn)行時(shí)組件之間的緊密集成。

組件是什么

很顯然, Microsoft . NET Framework 組件很容易編寫(xiě)。 讓它們與Visual Studio . NET 設(shè)計(jì)器一同工作的唯一要求是,它們實(shí)現(xiàn) System.ComponentModel.IComponent,即通常表明繼承于IComponent的默認(rèn)應(yīng)用。IComponent使組件可跟蹤設(shè)計(jì)時(shí)的信息(如它的容器組件或名稱(chēng))或訪(fǎng)問(wèn)設(shè)計(jì)器提供的服務(wù)。

讓我們編寫(xiě)一個(gè)簡(jiǎn)單的C#組件開(kāi)發(fā),它的形式如下:

  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. }  

顯然,這個(gè)組件不完成什么功能,但會(huì)將它置入 Visual Studio.NETWin 窗體設(shè)計(jì)器或組件設(shè)計(jì)器中,即可從屬性瀏覽器中看見(jiàn)它有名稱(chēng),也有一個(gè)稱(chēng)為“Value”的屬性,使用下拉箭頭可以將值設(shè)置為T(mén)rue或False,當(dāng)值在 True 和 False 之間切換時(shí),可以觸發(fā)事件OnValueChanged。

對(duì)于設(shè)計(jì)器來(lái)說(shuō),組件只是我們要說(shuō)明的一半,最重要的部分是屬性,它組成了元數(shù)據(jù),元數(shù)據(jù)是關(guān)于類(lèi)、屬性、事件等的信息。讓我們以Value屬性為例。僅作為屬性,就已經(jīng)有相關(guān)的元數(shù)據(jù)了,例如類(lèi)型(布爾)、行為(讀/寫(xiě))或名稱(chēng)(“Value”)。使用“反射”對(duì)基本元數(shù)據(jù)進(jìn)行檢索,即通用語(yǔ)言運(yùn)行時(shí)允許用戶(hù)在運(yùn)行時(shí)檢查對(duì)象的類(lèi)型、基本類(lèi)型、屬性、方法、構(gòu)造器、字段和訪(fǎng)問(wèn)級(jí)別。所有這些信息都被認(rèn)為是元數(shù)據(jù)。

定制元數(shù)據(jù)

定制元數(shù)據(jù)包括可添加到類(lèi)或類(lèi)成員的任意信息段(字段、屬性或方法),實(shí)際上是類(lèi)型本身被特定客戶(hù)所識(shí)別。對(duì)于Visual Studio .NET設(shè)計(jì)器來(lái)說(shuō),定制元數(shù)據(jù)構(gòu)成所有可擴(kuò)展性的基礎(chǔ)。VS .NET 設(shè)計(jì)器理解的所有元數(shù)據(jù)屬性都基于一名為System.ComponentModel.Member Attribute的類(lèi)。它提供一個(gè)基本類(lèi),因此開(kāi)發(fā)器所關(guān)心的屬性可以通過(guò)它們的類(lèi)型快速標(biāo)識(shí)。

通過(guò)一個(gè)典型實(shí)例可以更容易理解這一概念。比如我們不希望 Value屬性在屬性瀏覽器中顯示。我們可添加一個(gè)元數(shù)據(jù)屬性 System.ComponentModel.BrowsableAttribute 來(lái)控制一個(gè)屬性是否可被瀏覽。

  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. }  

在指定屬性時(shí),可以將“BrowsableAttribute”縮略為“Browsable”。由 C# 編譯器為我們添加“Attribute”一詞。唯一的限制是如果指定了屬性值,它必須與構(gòu)造器的屬性類(lèi)型相符,且該數(shù)值必須是常量。在本例中,BrowsableAttribute 有一個(gè)單一的布爾型參數(shù)“Browsable”的構(gòu)造器,編譯器把這個(gè)元數(shù)據(jù)屬性綁定到該構(gòu)造器并創(chuàng)建一個(gè)屬性類(lèi)的實(shí)例。如果屬性類(lèi)瀏覽器獲得了這個(gè)對(duì)象,它將枚舉出該對(duì)象的屬性并忽略“browsable”屬性,因?yàn)樗源藢傩詾闃?biāo)簽。因此看起來(lái)該對(duì)象沒(méi)有屬性。BrowsableAttribute 也可應(yīng)用于事件。

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

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

【編輯推薦】

  1. 詳解C#中不同類(lèi)的類(lèi)型
  2. 淺談C#中標(biāo)準(zhǔn)Dispose模式的實(shí)現(xiàn)
  3. C#選擇正確的集合進(jìn)行編碼
  4. C# 4.0新特性:協(xié)變與逆變中的編程思想
  5. C#應(yīng)用Attribute特性 代碼統(tǒng)計(jì)分析
責(zé)任編輯:彭凡 來(lái)源: study.qqcf.com
相關(guān)推薦

2009-09-17 16:34:24

C#組件類(lèi)

2009-08-25 17:41:51

C#開(kāi)發(fā)排序算法

2009-10-20 14:58:15

Javascript事

2009-09-22 17:53:32

C# COM組件開(kāi)發(fā)

2009-08-31 09:41:05

C#反射靜態(tài)方法開(kāi)發(fā)

2009-08-25 17:02:20

C#串口操作

2009-09-07 06:18:57

C#窗體設(shè)計(jì)器

2009-11-20 09:10:21

C#開(kāi)發(fā)環(huán)境

2009-01-19 10:26:02

C#Namespace.NET

2009-08-31 16:47:39

C#接口的定義

2009-08-31 15:34:45

常用操作C# TreeView

2009-08-21 09:14:47

C# Excel CO

2009-09-02 16:43:55

C#調(diào)用Excel的C

2009-08-03 14:36:08

c#組件

2009-08-14 17:09:48

C#引用類(lèi)型

2009-09-01 16:07:04

C#命名規(guī)約

2009-07-30 18:20:21

C#繼承

2009-08-24 11:23:41

C# TimeLabe

2009-09-07 16:13:56

C# MessageB

2020-10-16 08:30:00

foreach編程語(yǔ)言C#
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)