自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

在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è)計上的問題,那就是創(chuàng)建MyData對象的時機。按照程序2-1的手法,當(dāng)Class1對象被創(chuàng)建之初,其內(nèi)的_data對象也隨著被創(chuàng)建起來,這造成了Class1對象于創(chuàng)建初期就付出了一個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è)計概念很簡單,就是未使用前不預(yù)付成本。相對于程序2-1所使用的Pre-Allocate(預(yù)分配)概念,程序2-2采取以時間換取空間的策略,付出存取判斷式的代價來減輕空間浪費的情況。當(dāng)然,Pre-Allocate也不是一無是處,不須預(yù)判斷的快速存取特色適用于用戶必然會存取的屬性,但在一些特定的屬性上,例如ASP.NET中常見的Style屬性就不適合使用Pre-Allocate技巧,因為用戶不一定會使用該屬性,于此情況下,Lazy-Allocate模式說可以讓對象省下一些內(nèi)存成本。

Event

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

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

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

  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)用實例解析
  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 強制轉(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-08-20 09:52:31

C#參數(shù)類型

2009-11-23 15:57:51

PHP偽靜態(tài)

2021-03-10 10:13:39

爬蟲Python代碼

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-11-04 13:35:29

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

2022-12-07 10:28:22

2010-03-18 17:57:37

Java XMLSoc

2010-08-02 16:47:46

Flex

2020-07-24 09:56:12

React開發(fā)數(shù)據(jù)

2020-01-21 19:15:23

漏洞安全IT
點贊
收藏

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