科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道漫谈Visual C#的组件设计方法之一

漫谈Visual C#的组件设计方法之一

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

按照程序2-1的手法,当Class1对象被创建之初,其内的_data对象也随着被创建起来,这造成了Class1对象于创建初期就付出了一个MyData对象的内存成本,这对简单的类来说或如牛毛,但倘若Class1对象中拥有一群这类属性呢?

作者:中国IT实验室 来源:中国IT实验室 2007年9月11日

关键字: 编程

  • 评论
  • 分享微博
  • 分享邮件
  

     Properties
  
    在C#中为类预定义属性是件再简单不过的事,见程序1。
  
    程序1
  
  using System;
  namespace PropertiesDemo
  {
   public class MyData
   {
    ...............
   }
   public class Class1
   {
    private MyData _data;
    public MyData Data
    {
     get { return _data; }
    }
    public Class1()
    {
     _data = new MyData();
    }
   }
  }
  
    这是相当常见的属性预定义方式,同时也是个可正常运行的程序,不过其中隐含着一个设计上的问题,那就是创建MyData对象的时机。按照程序2-1的手法,当Class1对象被创建之初,其内的_data对象也随着被创建起来,这造成了Class1对象于创建初期就付出了一个MyData对象的内存成本,这对简单的类来说或如牛毛,但倘若Class1对象中拥有一群这类属性呢?为了解决这类问题,.net Framework中大量使用Lazy-Allocate(缓分配)技术,见程序2。
  
    程序2 Lazy-Allocate范例
  
  public class Class1
  {
   private MyData _data;
   public MyData Data
   {
    get
    {
     if(_data == null)
      data = new MyData();
     return _data;
    }
   }
   public Class1() { }
  }
  
    Lazy-Allocate的设计概念很简单,就是未使用前不预付成本。相对于程序2-1所使用的Pre-Allocate(预分配)概念,程序2-2采取以时间换取空间的策略,付出存取判断式的代价来减轻空间浪费的情况。当然,Pre-Allocate也不是一无是处,不须预判断的快速存取特色适用于用户必然会存取的属性,但在一些特定的属性上,例如ASP.NET中常见的Style属性就不适合使用Pre-Allocate技巧,因为用户不一定会使用该属性,于此情况下,Lazy-Allocate模式说可以让对象省下一些内存成本。
  
    Event
  
    事件处理是组件设计中相当重要的一环,在C#中事件与delegate是紧密相关的,程序3是一个简单的事件范例。
  
    程序3 简单的事件范例
  
  using System;
  namespace EventDemo
  {
   public delegate void ProcessHandler(object sender);
   public class Class1
   {
    private event ProcessHandler _processHandler = null;
    public event ProcessHandler ProcessStart
    {
     add
     {
      _processHandler += value;
     }
     remove
     {
      _processHandler -= value;
     }
    }
    public void Process()
    {
     _processHandler(this);
     for(int i = 0; i < 10; i++)
      i = i+1;
    }
    public Class1()
    {}
   }
  }
  
    C#之中delegate扮演着函数指针的角色,用户可以将某个函数加入一个delegate之中,而一个delegate允许用户加入一个以上的函数,当调用此delegate时就等同于调用其内所含的所有函数。不过程序2-3的设计手法潜藏着一个问题,就是当事件数众多时,对象就必须付出相应数量的delegate变量,如程序4所示。
  
   

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章