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

淺析C#組件設(shè)計(jì)的四種方法

開發(fā) 后端
C#組件設(shè)計(jì)將在這里為大家呈現(xiàn)四種不同的方法,希望對大家有所幫助。
C#組件設(shè)計(jì)應(yīng)該注意事件處理是組件設(shè)計(jì)中相當(dāng)重要的一環(huán),在C#中事件與delegate是緊密相關(guān)的。希望本文能對C#組件設(shè)計(jì)有所幫助。

在C#中為類預(yù)定義屬性是件再簡單不過的事,見程序1。

程序1

  1. using System;  
  2. namespace PropertiesDemo  
  3. {  
  4.  public class MyData  
  5.    
  6.  public class Class1  
  7.  {  
  8.   private MyData _data;  
  9.   public MyData Data  
  10.   {  
  11.    get { return _data; }  
  12.   }  
  13.   public Class1()  
  14.   {  
  15.    _data = new MyData();  
  16.   }  
  17.  }  
  18. }  

這是相當(dāng)常見的屬性預(yù)定義方式,同時(shí)也是個(gè)可正常運(yùn)行的程序,不過其中隱含著一個(gè)設(shè)計(jì)上的問題,那就是創(chuàng)建MyData對象的時(shí)機(jī)。按照程序2-1的手法,當(dāng)Class1對象被創(chuàng)建之初,其內(nèi)的_data對象也隨著被創(chuàng)建起來,這造成了Class1對象于創(chuàng)建初期就付出了一個(gè)MyData對象的內(nèi)存成本,這對簡單的類來說或如牛毛,但倘若Class1對象中擁有一群這類屬性呢?為了解決這類問題,.NET Framework中大量使用Lazy-Allocate(緩分配)技術(shù),見程序2。

程序2 Lazy-Allocate范例

  1. public class Class1  
  2. {  
  3.  private MyData _data;  
  4.  public MyData Data  
  5.  {  
  6.   get  
  7.   {  
  8.    if(_data == null)  
  9.     data = new MyData();  
  10.    return _data;  
  11.   }  
  12.  }  
  13.  public Class1() { }  
  14. }  

Lazy-Allocate的設(shè)計(jì)概念很簡單,就是未使用前不預(yù)付成本。相對于程序2-1所使用的Pre-Allocate(預(yù)分配)概念,程序2-2采取以時(shí)間換取空間的策略,付出存取判斷式的代價(jià)來減輕空間浪費(fèi)的情況。當(dāng)然,Pre-Allocate也不是一無是處,不須預(yù)判斷的快速存取特色適用于用戶必然會存取的屬性,但在一些特定的屬性上,例如ASP.NET中常見的Style屬性就不適合使用Pre-Allocate技巧,因?yàn)橛脩舨灰欢〞褂迷搶傩?,于此情況下,Lazy-Allocate模式說可以讓對象省下一些內(nèi)存成本。

Event

事件處理是組件設(shè)計(jì)中相當(dāng)重要的一環(huán),在C#中事件與delegate是緊密相關(guān)的,程序3是一個(gè)簡單的事件范例。

程序3 簡單的事件范例

  1. using System;  
  2. namespace EventDemo  
  3. {  
  4.  public delegate void ProcessHandler(object sender);  
  5.  public class Class1  
  6.  {  
  7.   private event ProcessHandler _processHandler = null;  
  8.   public event ProcessHandler ProcessStart  
  9.   {  
  10.    add  
  11.    {  
  12.     _processHandler += value;  
  13.    }  
  14.    remove  
  15.    {  
  16.     _processHandler -= value;  
  17.    }  
  18.   }  
  19.   public void Process()  
  20.   {  
  21.    _processHandler(this);  
  22.    for(int i = 0; i < 10; i++)  
  23.     i = i+1;  
  24.   }  
  25.   public Class1()  
  26.   {}  
  27.  }  
  28. }  

C#之中delegate扮演著函數(shù)指針的角色,用戶可以將某個(gè)函數(shù)加入一個(gè)delegate之中,而一個(gè)delegate允許用戶加入一個(gè)以上的函數(shù),當(dāng)調(diào)用此delegate時(shí)就等同于調(diào)用其內(nèi)所含的所有函數(shù)。不過程序2-3的設(shè)計(jì)手法潛藏著一個(gè)問題,就是當(dāng)事件數(shù)眾多時(shí),對象就必須付出相應(yīng)數(shù)量的delegate變量,如程序4所示。

程序4 傳統(tǒng)事件設(shè)計(jì)

  1. private event ProcessHandler _processStart = null;  
  2. private event ProcessHandler _processEnd = null;  
  3. private event ProcessHandler _processStep = null;  

【編輯推薦】

  1. C#數(shù)組和指針全面討論
  2. 簡單介紹C#數(shù)組和函數(shù)
  3. C#數(shù)組初始化的應(yīng)用實(shí)例解析
  4. 學(xué)習(xí)Visual C#數(shù)組速成法
  5. 淺談C#數(shù)組工作方式
責(zé)任編輯:彭凡 來源: CSDN
相關(guān)推薦

2009-08-26 15:04:35

C#轉(zhuǎn)換

2009-02-25 09:52:14

類型轉(zhuǎn)換.NET 強(qiáng)制轉(zhuǎn)型

2009-09-24 14:59:38

C#編寫COM組件

2009-08-05 14:09:04

C#日期轉(zhuǎn)換

2009-09-22 14:20:39

C#播放聲音

2014-03-17 09:22:43

Linux命令

2022-09-02 14:29:01

JavaScrip數(shù)組屬性

2009-11-23 15:57:51

PHP偽靜態(tài)

2021-03-10 10:13:39

爬蟲Python代碼

2009-08-20 09:52:31

C#參數(shù)類型

2011-06-22 15:21:08

XML

2020-08-10 00:30:55

備份密碼iPhone移動安全

2009-03-31 13:12:30

解析XMLJava

2024-10-24 08:04:00

2022-12-07 10:28:22

2022-11-04 13:35:29

IT遠(yuǎn)程工作混合工作

2009-09-08 17:20:01

C#排序算法

2009-09-18 19:09:41

C# COM組件

2016-06-28 10:19:31

云計(jì)算云安全

2010-07-16 13:50:53

Perl哈希表
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 久久久久中文字幕 | 久久久国产视频 | 国产黄a一级 | av在线三级 | 少妇特黄a一区二区三区88av | 在线免费亚洲视频 | 羞羞视频网站在线观看 | 精品国产一区二区三区久久狼黑人 | a国产一区二区免费入口 | 九色视频网站 | 99日韩| 天天色影视综合 | 国产亚洲成av人片在线观看桃 | 亚洲成人av一区二区 | 国产91丝袜在线播放 | 亚洲经典一区 | 91在线看片 | 日韩精品极品视频在线观看免费 | 久久婷婷麻豆国产91天堂 | 九九热视频这里只有精品 | 97国产一区二区精品久久呦 | 国产日韩欧美精品 | 亚洲欧美一区二区三区视频 | 日本不卡一区 | 国产超碰人人爽人人做人人爱 | 亚洲激情综合 | 国产精品波多野结衣 | 亚洲精品一区二区三区在线 | 久久国产精品-国产精品 | 人人草人人干 | 五月婷婷色| 成人国产精品久久 | 成人 在线 | 亚洲在线免费 | 日韩一区二区三区在线观看 | 国产午夜精品一区二区三区在线观看 | 免费的色网站 | 亚洲精品视频在线观看免费 | 欧美一区二区三区在线观看 | 国产亚洲一区二区三区 | 一本大道久久a久久精二百 国产成人免费在线 |