程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#組件開發 Zt

C#組件開發 Zt

編輯:關於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使組件可跟蹤設計時的信息(如它的容器組件或名稱)或訪問
設計器提供的服務。

  讓我們編寫一個簡單的 .Net 組件,它的形式如下:

using System;
  using System.ComponentModel;
  public class BoolTracker : Component {
    private bool state;
    private EventHandler handler;
    private static object EventValueChanged = new object();

    public BoolTracker() {
    }

    public bool Value {
      get {
        return state;
      }
      set {
        if (this.state != value) {
          this.state = value;
          OnValueChanged(new EventArgs());
        }
      }
    }

    public void AddOnValueChanged(EventHandler h) {
      handler = (EventHandler)Delegate.Combine(handler, h);
    }

    protected virtual void OnValueChanged(EventArgs e) {
      if (handler != null) {
        handler(this, e);
      }
    }

    public void RemoveOnValueChanged(EventHandler h) {
      handler = (EventHandler)Delegate.Remove(handler, h);
    }

  }

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

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

定制元數據

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

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

[Browsable(false)]
public bool Value {
  get {
   return state;
       }
  set {
  if (this.state != value) {
     this.state = value;
     OnValueChanged(new EventArgs());
   }
  }
}

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

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

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