如何把写在没有窗体的Unit单元文件里的过程或者函数调用(20分)

  • 主题发起人 主题发起人 carrie4002
  • 开始时间 开始时间
C

carrie4002

Unregistered / Unconfirmed
GUEST, unregistred user!
把所有公用的过程和函数想写在一个只有单元文件没有窗体的文件里。
该如何在FuncUnit定义这些函数或者过程?
又该如何在别的窗体文件中如何引用(调用)这些过程(函数)?
 
uses Unit**;
Ok
 
uses Funcunit;
就可以了,^_^
 
在FuncUnit定义这些函数或者过程?FuncUnit里的结构该如何?
比如:我的A、B、C、D过程函数该怎么定义(放在FuncUnit的什么位置呢)?
(你们说的引用我已经有了。不是这个问题。)
 
unit PubUnit;
interface
uses Windows, Dialogs, SysUtils, Classes, Forms, IniFiles;
function a:boolean;
procedure b;
implementation
function a:boolean;
begin
result:=true;
end;
procedure b;
begin
.....
end;
 
在用到的单元里USES中加上公用单元名就可以了。
 
TO heart_broken:
谢谢你。
1、uses Windows, Dialogs, SysUtils, Classes, Forms, IniFiles;
//上句是自己加进去的吗?默认的是没有的。
2、function a:boolean;procedure b;
//这两个过程不再需要前用"private"、"public"了吗?
 
另外:
unit FuncUnit;
interface
uses
Windows, Dialogs, SysUtils, Classes, Forms, IniFiles;
implementation
uses math;

Procedure CalcA(N1:String;N2:Double);
begin
.....
end;

Function CalcB(M1:Double;M2:Double):Double;
begin
........
end;
如果,需要在ABC窗体里调用FuncUnit单元里的CalcA和CalcB怎么办?
因为我某窗体用FuncUnit.CalcA('spring',12.345678)来调用公共单元
的CalcA和CalcB时,编译错误提示:CalcA没有定义。为什么?(在该窗
体的Uses 部分,我已经Uses FuncUnit了)
 
uses FuncUnit;
写在你的ABC窗体里
 
Jave和C#是完全面向对象的
甚至1,2这些数字都是对象。
Delphi还支持全局变量,全局的方法
我觉得这样虽然好用,但是和面向对象的思想协调不起来
越深入的学习反而越觉得糊涂
如果可以我建议采用这种方法:

1.在你的FuncUnit单元中创建一个类,比如名称叫TFuncLib
2.所有的函数和过程写成类方法,即前面用class修饰的方法,比如
class Function FuncA(AValue: Integer): Boolean;
3.在单元的实施部分写上类方法的实现代码。
这类似C#中的静态方法。

调用的时候只要用类名作前缀就可以了,比如
TFuncLib.FuncA(20);

如果采用这样的方法,以后再学Java或者C#或者别的面向对象的语言的时候就不会觉得困惑
欢迎指教,谢谢
 
这样:
unit FuncUnit;
interface
uses
Windows, Dialogs, SysUtils, Classes, Forms, IniFiles;
Procedure CalcA(N1:String;N2:Double);
Function CalcB(M1:Double;M2:Double):Double;
implementation
uses math;
fuction funcC;
begin
.......
end;

Procedure CalcA(N1:String;N2:Double);
begin
funcC;
end;

Function CalcB(M1:Double;M2:Double):Double;
begin
........
end;
如果有funcC,但不想在其它单元中看到,只是本单元内部用,就像上面一样,不必放函数头在interface部分,而calcA,calcB其它单元要用,就要放函数头在interface后。

to muhx:
>>Delphi还支持全局变量
这样不算全局的,不引用此单元就看不到,所以具有很好的封装性。不一定用个变量函数就要用类。
 
就是一句话,放到implementation前面就可以,当然如果不USES当前PAS也不行
 
放在implementation上面,引用时不需要加单元名.相当于全局的..而定义在private和public里面的需要加单元名
 
TO 我爱PASCAL and bluesweet:
如果是只在FuncUnit单元内调用的过程或者函数,那么,是定义在private还是public里呢?
 
private和public是类的成员,如果是定义在单元里面,只分interface部分和implementation部分,一般在interface部分声明的函数外部单元都能访问,所以,你在interface部分声明函数,implementation部分实现函数就可以了.给你一个非常简单的单元例子:
unit FuncUnit;

interface

function OtherUnitCanSee: Boolean;

implementation

function OtherUnitCanSee: Boolean;
begin
///
end;

function OtherUnitCannotSee: Boolean;
begin
//
end;

end.
 
TO zqw0117:
谢谢你。你的意思我明白。
只是,我需要实现在一个公共的函数单元里有若干供全局调用的函数或过程(这些过程或函数的定义如你所说)。
另有一些过程或函数,不需要供全局调用,而只是供该公共函数单元里这些全局的函数或过程所调用。这些过程或者函数,是定义在private还是public里呢?
 
楼主:
你的意思我知道了,private和public都是form的类的方法,和你说的不一样
你要把类和单元区别开,一个单元中不一定有类的定义,有也可以有几个类,窗口form类除外,所以只用单元
interface中的函数就可以全局用,当然要引用本单元,
另有一些过程或函数,不需要供全局调用,而只是供该公共函数单元里这些全局的函数或过程所调用。这些过程或者函数,是定义在implematation中的函数
 
TO modula-2:
谢谢。
终于明白你和zqw0117所说的内容。呵呵 非常感谢
 
多人接受答案了。
 
后退
顶部