社区
Delphi
帖子详情
如何把一个类型作为参数进行传递?
niniu
2003-09-24 03:21:26
如何把一个类型作为参数进行传递?
想了很久没想明白
...全文
232
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
打赏
举报
回复
你想實現什么?
你向我借錢,我通過短信息傳遞抽象的一千元,對你有什么用?
我相信還是錢的實體,人民幣(通過郵電局傳遞給你)對你有用處點。
對不起,所以,我不理解你的意圖。
java
类型
作为
参数
传递
的问题
java
类型
作为
参数
传递
的问题基本
类型
对象
类型
在实际开发中,在抽取公共方法的时候,对于一些值
传递
并没有做深入的了解,导致碰到了问题,现在对于值
传递
进行
总结。 基本
类型
对于基本
类型
,在Java语言提供了八种基本
类型
。六种数字
类型
(四个整数型,两个浮点型),一种字符
类型
,还有一种布尔型,同时还包括我们经常使用到的BigDecimal
类型
: 在方法调用时,实际
参数
把它的值
传递
给对应的形式
参数
,方法执行中形式
参数
值的改变不影响实际传入
参数
的值,这个时候是值
传递
。 public static void ma
基本数据
类型
和引用数据
类型
作为方法
参数
传递
的区别
结论 基本数据
类型
作为方法
参数
传递
的时候,
传递
的是值,并不是基本数据
类型
所存的地址。 引用
类型
作为方法
参数
传递
的时候,
传递
的是引用,当我们通过引用改变变量的内容的时候,由于两个对象的地址指向同一块内存区域,所以可以成功改变值。 案例 基本数据
类型
对于int基本
类型
以及他的包装类(考虑到Integer的缓存地址(-128~127),设置的值大一点),
传递
的是值,通过方法改变
参数
不能实现。特殊的,String
类型
是final修饰的,也不能通过方法修改值(当然,String
类型
其他的方法也不能修改哈哈哈哈,
说说基本
类型
和引用
类型
作为
参数
传递
的区别
结论: 1、基本数据
类型
做为形式
参数
传递
,对形式
参数
的改变不会影响到实际
参数
。 2、引用数据
类型
比如String、Integer做为形式
参数
传递
和基本数据
类型
做为形式
参数
传递
一样,对形式
参数
的改变不会影响到实际
参数
。 3、引用数据
类型
比如自定义类Student做为形式
参数
传递
,对形式
参数
的改变会影响到实际
参数
。 代码示例: package cn.zxj.com; public class Student { private String name; private int ag
java中String对象作为
参数
传递
问题
问题 java中将对象作为
参数
传递
究竟是值
传递
还是引用
传递
? 1、基本
类型
作为
参数
传递
时,是
传递
值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的。 2、对象作为
参数
传递
时,是把对象在内存中的地址拷贝了一份传给了
参数
。 且看下面代码 首先我们有
一个
Student类,它有两个成员变量name和age package test_code; public class Student { String name; int age; public Student(String name,int
java 方法当
参数
_如何在Java中将函数作为
参数
传递
?
如何在Java中将函数作为
参数
传递
?这个问题在这里已有答案:Java Pass方法作为
参数
14个答案是否可以将方法作为
参数
传递
给Java方法? 如果是这样,有人可以指导我吗? 这似乎并不重要Jason asked 2019-01-26T17:30:56Z8个解决方案379 votesJava 8及以上版本使用Java 8+ ...
Delphi
5,930
社区成员
262,938
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章