when you first access a class, shared new() will be called once (only once)>>>他在内存使用上与创建类型的实例有何区别?类名.shared函数()是直接调用该函数,不需要类的实例

解决方案 »

  1.   

    直接调用该函数后,创建的对象(包括在new()时创建的)何时销毁?是不是也经历
    finalize
      

  2.   

    如果考虑内存使用的问题,大家可能不得不从Windows内存管理机制想起,那样会是个比较复杂的问题,但你可以参考DOS内存分配机制的原理来理解问题,虽然Windows已经完全改变了内存分配的机制,但原理仍然是可以套用的.一个Shared的代码(方法或是属性)是在你定义类时被加载的(或说进行内存分配的),这也是你不需要实例化类就可以调用的原因,而非Shared的属性或方法在你声明一个变量时仅仅分配了一个变量指针而非类对象实体,只在你New时才被分配真正的内存单元,这就是内存使用上的区别了,再涉及深一点,Shared更象占用一个应用的Data Segment,而非Shared的使用的是Stack Segment内存,这其中单元线程和单线程模型又是有所区别的.对于创建类的实例来说,Shared的代码并不会加载在每个实例的内存空间中,而是在一个全局的类空间中,所有实例调用的都应该是同一个代码段而不是每个实例中独立的代码段(哪怕那些代码完全相同),这也使得Shared的方法只可以访问Shared的属性,而不能访问非Shared的属性,因为只有他们才属于同一个内存空间中.
      

  3.   

    Shared代码段内变量同样只有Sub级的生命周期,而其代码本身或是Shared变量却有应用级的生命周期,也就是Project级的