过程和函数是否可以这样理解:
首先:二者都必须先定义,后说明.
其次:函数有返值,而过程没有.
再次:以下我理解得对否?
1.工程中定义的变量是全局变量,任何单元中都可以调用.
2.单元中定义的变量是局部变量,只对本单元有效.
3.过程和函数中定义的变量也是局部变量,只在过程和函数有效.
4.问题:
A.过程和函数可以在TYPE或VAR中去定义,二者有何区别,这一点对书上说的"XXX过程是属性TFORM1对象的一部分,所以过程的标头必须放在TFORM1对象的类型定义中,而且过程的主体也必须加上TFORM1.的限定词",不理解.
B.可不去单独写一个单元,里而写上所要用到的过程和函数,要用到过程和函数的单元去调用该单元中的过程和函数,能提供简单的范例参考吗?
首先:二者都必须先定义,后说明.
其次:函数有返值,而过程没有.
再次:以下我理解得对否?
1.工程中定义的变量是全局变量,任何单元中都可以调用.
2.单元中定义的变量是局部变量,只对本单元有效.
3.过程和函数中定义的变量也是局部变量,只在过程和函数有效.
4.问题:
A.过程和函数可以在TYPE或VAR中去定义,二者有何区别,这一点对书上说的"XXX过程是属性TFORM1对象的一部分,所以过程的标头必须放在TFORM1对象的类型定义中,而且过程的主体也必须加上TFORM1.的限定词",不理解.
B.可不去单独写一个单元,里而写上所要用到的过程和函数,要用到过程和函数的单元去调用该单元中的过程和函数,能提供简单的范例参考吗?
B 可以! 在pbulic中定义!
应该说是在这里可以用过程和函数来定义类型或变量!
type部分是类型定义,var部分是变量定义,你说的都不对。
可以实现单独编写一个单元,里面是所要用到的函数和过程,但要在这个单元的interface部分声明这些函数和过程,如果在interface部分不出现是不行的。
是否改为
二者都必须先申明,后定义
比较好?
1.工程中定义的变量是全局变量,任何单元中都可以调用.
现在不看语法,忘记了,但感觉不完全是这样。如在工程中定义的局部变量,在其他单元也可以随意使用吗? 这怎样体现模块化的?
2.单元中定义的变量是局部变量,只对本单元有效.
单元implementation 处定义的才只对本单元有效
interface部分定义的,对所有引用该单元的单元有效
A.过程和函数可以在TYPE或VAR中去定义
函数和过程怎么能在TYPE或VAR中去定义,在Type中定义的是函数/过程类型,而不是函数,VAR部分定义的是变量,也不是函数或过程。
好比是Type中定义的是类;Var中的是指针。而函数和过程才是真正的对象。
B.可以
【为了区分,楼主原文用“//”表示,我的回答用“>>”表示】//过程和函数是否可以这样理解: //首先:二者都必须先定义,后说明.
>>应该是先定义,后实现。在Object Pascal的单元文件的结构中,过程和函数的定义都是写在Interface部分,而实现都是写在implementation部分中。 //其次:函数有返值,而过程没有.
>>严格的说,是Object Pascal语言在定义上,定义了“函数”有返回值,而定义了“过程”没有,这构成了两者的区别。为什么这么说呢?因为过程本身在使用的时候,也可以有返回值。比如,当你在过程的参数中使用了var或者out的定义的时候。(用 var 定义的参数,传递进去的是一个可以改变的值,其实是一个地址;用 out 定义的参数,是为了在过程结束的时候传递出一个值。) //再次:以下我理解得对否? //1.工程中定义的变量是全局变量,任何单元中都可以调用.
>>工程单元默认被项目里面的所有其他单元引用,所以,在它里面定义的变量,就自然可以在其他任何单元中调用,所以是全局的。 //2.单元中定义的变量是局部变量,只对本单元有效.
>>在单元文件的结构上,Interface部分是对外公开可见的,implementation部分是被本单元文件内使用的。所以应该说,单元中,在implementation部分定义的变量是局部变量;而在Interface部分定义的变量,对于引用了该单元的其他单元文件,是可见的,因而是全局的。 //3.过程和函数中定义的变量也是局部变量,只在过程和函数有效.
>>这是变量的生存期的问题。一般性的过程和函数内部定义的变量,都是局部变量,过程或函数执行完毕,变量的生存期就随之结束;但是,如果该过程或者变量被声明为静态的,那么该过程或函数所创建的变量的生存期就是整个程序的运行时间,它只会随程序运行的结束而释放。(也就是说,即使该过程或函数执行完毕,该变量仍旧存在在内存中,可以被该过程或者函数再次执行时继续调用) //4.问题: //A.过程和函数可以在TYPE或VAR中去定义,二者有何区别,这一点对书上说的"XXX过程是属性TFORM1对象的一部分,所以过程的标头必须放在TFORM1对象的类型定义中,而且过程的主体也必须加上TFORM1.的限定词",不理解.
>>过程和函数应该不可以用var去定义,只能用Type,因为var定义的是变量,同时分配给该变量内存,而过程或函数的定义不是一个变量;
>>你在后面引用的一段话,其实是面向对象概念中,类的概念。“TFORM1对象”是类TForm1的一个实例;“XXX过程”如果放在类TForm1中,那么它就是类TForm1的一个方法;而类的方法在其实现部分,需要加上类的标识;在引用部分,则需要加上对实例的引用,就是所谓的“TFORM1.”。(汗...好像有点绕口,这涉及到对面向对象概念的理解,建议楼主去找找相关的书看看。) //B.可不去单独写一个单元,里而写上所要用到的过程和函数,要用到过程和函数的单元去调用该单元中的过程和函数,能提供简单的范例参考吗?
>>可以的。把需要用到的过程和函数集中放在一个单元,然后在需要使用它们的单元里面,引用该单元,就可以使用它们了。实际上,这是把那些过程和函数,都变成了全局的。