社区
Delphi
帖子详情
如何把一个类型作为参数进行传递?
niniu
2003-09-24 03:21:26
如何把一个类型作为参数进行传递?
想了很久没想明白
...全文
219
9
打赏
收藏
如何把一个类型作为参数进行传递?
如何把一个类型作为参数进行传递? 想了很久没想明白
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qiume
2003-09-24
打赏
举报
回复
建议看Delphi的help
hiflower
2003-09-24
打赏
举报
回复
说得很清楚了,结吧
jacky_shen
2003-09-24
打赏
举报
回复
类引用
有时类的操作作用于其自身,这不同于作用于类的实例(即对象)。例如,当用类引用调用构造器方法时。对于这样的情况,总是可以明确指定要用的类的名称,但有时必需声明变量或参数把类作为值处理,并且这种情况下需要类引用类型(class-reference types)。
类引用类型
类引用类型有时叫做元类(metaclass),表示类引用类型的结构具有如下形式
class of type
这里的type是任何类类型。标识符type自身表示一个值,它的类型是type类。如果type1是type2的祖先,那么type2的类与type1的类是赋值兼容的。因此,
type TClass = class of TObject;
var AnyObj: TClass;
这里声明一个叫做AnyObj的变量,用于可以保存对任何类的引用。(类引用类型的定义不能直接出现在变量声明或参数列表声明中。)可以把值nil赋给任何类引用类型的变量。
要明白类引用类型是如何被使用的,可以查看TCollection(Classes单元中)的构造器声明:
type TCollectionItemClass = class of TCollectionItem;
...
constructor Create(ItemClass: TCollectionItemClass);
这里的声明表明,要创建TCollection的实例对象,就必需向构造器传递TCollectionItem类或自该类派生的类的名称。
编译时,想要调用类或对象的类方法或者虚拟的构造器,而不知道其实际类型时,类引用类型是有用的。
构造器和类引用
构造器可以被类引用类型的变量调用。这就允许在编译时构造类型未知的对象。例如,
type TControlClass = class of TControl;
function CreateControl(ControlClass: TControlClass;
const ControlName: string; X, Y, W, H: Integer): TControl;
begin
Result := ControlClass.Create(MainForm);
with Result do
begin
Parent := MainForm;
Name := ControlName;
SetBounds(X, Y, W, H);
Visible := True;
end;
end;
上面的例子中,CreateControl函数需要一个类引用类型告诉它何种控件被创建。该函数用这一参数调用类的构造器。因为类类型标识符表示类引用的值,所以对CreateControl调用可以指定类的标识符以创建相应的对象。例如,
CreateControl(TEdit, 'Edit1', 10, 10, 100, 20);
用类引用调用的构造器通常是虚拟的。运行时类引用的类型决定了构造器在调用时的具体实现。
SarahCla
2003-09-24
打赏
举报
回复
用TObject类型传递
在函数中通过判断传进来的类型的类名,例如:
function LoadData(Sender:TObject);
begin
if Sender=Edit2 then
TEdit(Sender).Text:='hehe';
......
End;
SarahCla
2003-09-24
打赏
举报
回复
用TObject类型传递
在函数中通过判断传进来的类型的类名,例如:
if Sender=Edit2 then
TEdit(Sender).Text:='hehe';
FrameSniper
2003-09-24
打赏
举报
回复
type
TSomeProcType = procedure (var AI:Integer);
....
procedure SomeProcWithTypeParams(ASomeProcType:TSomeProcType);
....
procedure SomeProcWithTypeParams(ASomeProcType:TSomeProcType);
begin
ShowMessage(IntToStr(PInteger(@ASomeProcType)));
end;
这里就是将一个类型(过程类型)做为参数传递给相应方法进行处理!
leapmars
2003-09-24
打赏
举报
回复
使用 Class-reference types!
例如:
TMyClass = class(TObject)
......
end;
TMyClass2 = class(TMyClass)
......
end;
TMyClassRef = class of TMyClass; // 声明Class-reference types
procedure f(MyClass: TMyClassRef);
begin
.....
end;
调用的时候可以:
f(TMyClass);
f(TMyClass2); // TMyClass 的派生类也行!
DelphiBoy2003
2003-09-24
打赏
举报
回复
procedure a(s :string);
var
i :integer;
begin
if s = 'integer' then
i := 1
else
i := 0;
end;
swayi21
2003-09-24
打赏
举报
回复
你想實現什么?
你向我借錢,我通過短信息傳遞抽象的一千元,對你有什么用?
我相信還是錢的實體,人民幣(通過郵電局傳遞給你)對你有用處點。
對不起,所以,我不理解你的意圖。
java
类型
作为
参数
传递
的问题
java
类型
作为
参数
传递
的问题基本
类型
对象
类型
在实际开发中,在抽取公共方法的时候,对于一些值
传递
并没有做深入的了解,导致碰到了问题,现在对于值
传递
进行
总结。 基本
类型
对于基本
类型
,在Java语言提供了八种...
Enum对象 作为
参数
如何
传递
? postman请求
在请求postman的时候,Enum对象作为
参数
如何
传递
? 要求:
传递
orders对象,用于es排序: private String fieldName; private OrderBy orderBy; public enum OrderBy { ASC("asc"), DESC("desc"); } ...
说说基本
类型
和引用
类型
作为
参数
传递
的区别
2、引用数据
类型
比如String、Integer做为形式
参数
传递
和基本数据
类型
做为形式
参数
传递
一样,对形式
参数
的改变不会影响到实际
参数
。 3、引用数据
类型
比如自定义类Student做为形式
参数
传递
,对形式
参数
的改变会影响到...
java中String对象作为
参数
传递
问题
1、基本
类型
作为
参数
传递
时,是
传递
值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的。 2、对象作为
参数
传递
时,是把对象在内存中的地址拷贝了一份传给了
参数
。 且看下面代码 首先我们有
一个
Student类,它有两个...
关于在C/C++语言中,函数如何返回数组,数组如何作为
参数
传递
以及返回数组的函数该如何调用问题的总结
可能很多初学者对C语言中(C++类似),数组作为
参数
传递
,和
一个
函数如何返回
一个
数组这类问题很迷惑,因为这里面涉及到指针问题,而初学者对指针了解甚少,更别说使用了。我也是刚刚需要实现
一个
简单算法才用到这...
Delphi
5,388
社区成员
262,730
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章