在窗体内定义的全局变量,是真正的全局变量吗?
理论上,窗体本身就是一个类,然后实例化这个类,就是窗体,基于这一点,在窗体内是不能有全局变量的呀。因为窗体是实例化后的一个对象呀?窗体随着对象的创建而存在,随着对象的卸载而消失。但是为什么在窗体内可以定义public类型的变量呢?
另外,如果在模块中定义全局变量,一定是在内存的数据段分配空间的,在编译时就分配好空间了。我想问,在窗体中定义的变量,是在数据段分配空间吗?还是在堆栈段分配空间。如果从窗体是对象实例这一点考虑问题,应该在堆栈段分配空间,但是如果在堆栈段分配空间,那它就不是全局变量呀。
反之,如果在数据段分配空间,那么窗体是一个实例化的对象,又做何解释呢?
理论上,窗体本身就是一个类,然后实例化这个类,就是窗体,基于这一点,在窗体内是不能有全局变量的呀。因为窗体是实例化后的一个对象呀?窗体随着对象的创建而存在,随着对象的卸载而消失。但是为什么在窗体内可以定义public类型的变量呢?
另外,如果在模块中定义全局变量,一定是在内存的数据段分配空间的,在编译时就分配好空间了。我想问,在窗体中定义的变量,是在数据段分配空间吗?还是在堆栈段分配空间。如果从窗体是对象实例这一点考虑问题,应该在堆栈段分配空间,但是如果在堆栈段分配空间,那它就不是全局变量呀。
反之,如果在数据段分配空间,那么窗体是一个实例化的对象,又做何解释呢?
Form2 中调用bl=Form1.iboon要指明窗体的名称;但如果它在标准模块则直接bl=iboon
对于一个实例化的对象来说,在外部可以访问的,只有public属性呀,有什么不对吗?
(1)就作用范围而言,窗体中的Public变量在应用程序中的每一处可见,它的确是"全局的";
(2)窗体中的Public变量和标准模块中Public变量是存在很大区别,最大的区别是窗体中的Public变量要依赖于窗体实例的存在,而标准模块中Public变量在整个程序运行期都是有效的.显然,窗体中的Public变量兼有全局变量的作用范围但又具有类属性的特征.
(3)看一看MSDN:
Visual Basic 中的变量可以有下列范围:范围 声明位置 可见位置
过程级 过程,子过程或函数过程中的 ‘Private’ 在声明它的过程中
模块级 窗体或代码模块(.frm、.bas )的声明部分中的 ‘Private’ 窗体或代码模块中的每一个过程
全局 代码模块(.bas)的声明部分中的 ‘Public’ 应用程序中的每一处
(4)个人认为窗体中的Public变量只是可视作"全局变量",本质上它只是类的一个接口.同样的道理本人认为只有属性过程定义的变量才是真正属性,也不承认它是属性.
(5)道理于此,如果没有严格的定义,各种看法都有自己的侧重点,都有道理.不能简单认为自己就对别人的就错.
上面的无语,是因为不认同全局变量等于属性的看法.
自己写个类,定义一个public变量,然后编译一下,用oleview看下。
http://topic.csdn.net/u/20090514/14/cca969e5-8ca1-442e-b966-e42923205a5b.html
-------------------------------------------------------------------------------------
PS:
这些是基于我认为窗体是一个类,如果窗体不是类,那么我的观点就错了。
楼主的这个问题只问对不对,没问是不是公共变量,COM中也没有公共变量的说法。我这里没有提到公共变量,请不要偷换概念,谢谢。1)就作用范围而言,窗体中的Public变量在应用程序中的每一处可见,它的确是"全局的";
我在21楼引用你的那段文字,其中的1.2两点不该分开,窗口类内的Public变量根本就不是应用程序内每处可见。