国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

C#組件開發(fā) Zt

2024-07-21 02:24:19
字體:
供稿:網(wǎng)友

簡介

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

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

組件是什么

  很顯然, microsoft . net framework 組件很容易編寫。 讓它們與
visual studio . net 設(shè)計(jì)器一同工作的唯一要求是,它們實(shí)現(xiàn) system.
componentmodel.icomponent,即通常表明繼承于icomponent的默認(rèn)應(yīng)用。
icomponent使組件可跟蹤設(shè)計(jì)時(shí)的信息(如它的容器組件或名稱)或訪問
設(shè)計(jì)器提供的服務(wù)。

  讓我們編寫一個(gè)簡單的 .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);
    }

  }

  顯然,這個(gè)組件不完成什么功能,但會(huì)將它置入 visual studio.net
win 窗體設(shè)計(jì)器或組件設(shè)計(jì)器中,即可從屬性瀏覽器中看見它有名稱,也
有一個(gè)稱為“value”的屬性,使用下拉箭頭可以將值設(shè)置為true或false,
當(dāng)值在 true 和 false 之間切換時(shí),可以觸發(fā)事件onvaluechanged。

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

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

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

  通過一個(gè)典型實(shí)例可以更容易理解這一概念。比如我們不希望 value
屬性在屬性瀏覽器中顯示。我們可添加一個(gè)元數(shù)據(jù)屬性 system.component
model.browsableattribute 來控制一個(gè)屬性是否可被瀏覽。

[browsable(false)]
public bool value {
  get {
   return state;
       }
  set {
  if (this.state != value) {
     this.state = value;
     onvaluechanged(new eventargs());
   }
  }
}

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

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

屬性名 說明
browsableattribute控制屬性或事件是否顯示在屬性瀏覽器中。
bindableattribute確定屬性是否適合數(shù)據(jù)綁定器進(jìn)行綁定。
categoryattribute指定屬性在屬性瀏覽器中應(yīng)分組的類別(“appearance”,
“l(fā)ayout”, “behavior”,“ misc”等等)。
defaulteventattribute/ defaultpropertyattribute 指定對象的默認(rèn)事
件或?qū)傩浴?
helpattribute 指定屬性或事件的幫助文件和主題。
licenseproviderattribute 指向?yàn)榻M件提供許可證信息的 license
provider。
mergablepropertyattribute 在屬性瀏覽器中當(dāng)多個(gè)組件被瀏覽和選中時(shí),
允許或阻止包含某屬性。
persistableattribute 確定在 win forms designer 或 component
designer 等可視設(shè)計(jì)器中生成代碼時(shí),屬性值是否應(yīng)與代碼保持一致。
persistcontentsattribute 確定代碼生成是否應(yīng)回歸到對象的非數(shù)值類
型屬性以及是否保持代碼與屬性值一致。icollection 屬性類型是這一應(yīng)
用的典型示例。
showintoolboxattribute 確定是否允許在工具框中使用這一組件。
toolboxitemattriubte 指定從工具框中創(chuàng)建類時(shí)應(yīng)使用的 toolboxitem
類型。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 吕梁市| 那坡县| 达孜县| 任丘市| 贵阳市| 津市市| 崇文区| 那曲县| 垣曲县| 长沙市| 大同县| 宝丰县| 云阳县| 浪卡子县| 武陟县| 来凤县| 广东省| 水城县| 高唐县| 铜陵市| 安吉县| 贵德县| 星座| 宁南县| 金堂县| 大同县| 南华县| 凤台县| 渝北区| 崇礼县| 武宁县| 井研县| 唐山市| 金华市| 普陀区| 靖安县| 如东县| 榆树市| 河西区| 南川市| 张家川|