社区
Delphi
帖子详情
如何把一个类型作为参数进行传递?
niniu
2003-09-24 03:21:26
如何把一个类型作为参数进行传递?
想了很久没想明白
...全文
251
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;
tobelost
2003-09-24
打赏
举报
回复
你想實現什么?
你向我借錢,我通過短信息傳遞抽象的一千元,對你有什么用?
我相信還是錢的實體,人民幣(通過郵電局傳遞給你)對你有用處點。
對不起,所以,我不理解你的意圖。
controller
传递
一个
list
类型
参数
的情况
list
类型
的
参数
如果只有
一个
的情况下,不需要封装成对象,只需要在前面加注解@RequestBody
求教:WebService如何
传递
一个
TreeView
类型
的
参数
啊?
为什么80%的码农都做不了架构师?>>> ...
java
传递
参数
“引用是一种数据
类型
”,“
参数
是引用的
一个
拷贝”
“引用是一种数据
类型
”,“
参数
是引用的
一个
拷贝”
传递
参数
的时候,如果是基本
类型
,
传递
的是基本
类型
的copy 如果是对象
类型
,
传递
的是对象
类型
的引用的新生成的copy,这个copy 指向的仍然是真正的地址。 新生成的copy是和原来的
参数
有区别的,它是
一个
在stack顶新生成的,需要占内存空间的。 因此,如果在method内部对新生成的copy
进行
对象赋值操作是对原来的
参数
对象...
swagger如何
传递
Object
类型
的数据?
如题,某类中有
一个
Object
类型
的属性,该类作为controller层
参数
时,如何
传递
? @Data @AllArgsConstructor @NoArgsConstructor public class FilterConditionValue { private String id; private Object value; } 测试 controller方法如下: @PostMapping("test") @ApiOperation(value = "test") @Api
python中类的
参数
怎么传_如何将整个类作为
参数
传递
给另
一个
类的方法
首先,不需要在Python中指定
类型
。因此,如果您希望method获取
一个
First实例,只需执行以下操作:class Second():def __init__(self, c, d):passdef method(self, first):passmy_first = First(0, 1)my_second = Second(2, 3)my_second.method(my_first)我相...
Delphi
5,943
社区成员
262,941
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章