现在的位置: 首页 > 综合 > 正文

Properties属性

2012年08月18日 ⁄ 综合 ⁄ 共 812字 ⁄ 字号 评论关闭

在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对象的时机。按照上面程序的写法,当Class1对象创建之初,其内的data对象也随着被创建起来了,这造成了Class1对象于创建初期就付出了一个MyData对象的内存成本,这对简单的类来说或如牛毛,但倘若Class1对象中拥有一群这类属性呢?为了解决这类问题,.NET Framework中大量使用Lazy-Allocate(缓分配)技术。

如下面程序(1-2):

public class Class1
{
    private MyData data;
    public MyData Data
    {
        get
        {
             if(data==null)
                 data = new MyData();
             return data;
        }
    }
    public Class1() {}
}

Lazy-Allocate的设计概念很简单,就是未使用前不预付成本。相对于程序1-1所使用的Pre-Allocate(预分配)概念,程序1-2采取以时间获取空间的策略,付出存取判断式的代价来减轻空间浪费的情况。当然,Pre-Allocate也不是一无是处,不须预判断的快速存取特色适用于用户必然会存取的属性,但在一些特定的属性上,例如asp.net中常见的Style属性就不适合使用Pre-Allocate技巧,因为用户不一定会使用该属性,于此情况下,Lazy-Allocate模式说可以让对象省下一些内存成本。

 

抱歉!评论已关闭.