请问 delphi 怎样自定义一个结构?怎么创建、初始化、destroy?

时间:2022-09-29 20:39:53
我用
type Ta=class
    id:string;
    name:string;
end;
创建然后
var 
xx:Ta;
begin
   .......

编译时提示 xx 没初始化,程序运行时出错,

请问 delphi 怎样自定义一个结构?怎么创建、初始化?

8 个解决方案

#1


delphi的对象模型是基于引用的,而不是基于值的,所以应该这样:

var xx:Ta;
begin
  xx := Ta.Create;
  ...
  xx.Free; //to destroy
end;

#2


也就是说,var中定义的对象,只有内建类型(如:integer、string等),是基于值的,对于程序员自定义类型,都是基于引用的(就像是一个指针)。

#3


同意楼上的高见!你应在用的时候再创建一个实例。

#4


你写的是类,类的实例要通过构造函数来初始化一个对象。而结构是不用,可以直接用。

#5


干吗那么复杂?用Record不就可以了。
type
  Ta=record
    ID:string;
    Name:string;
end;

也不用担心初始化之类的。

#6


多谢各位大侠!!!小弟还有一个问题:

如果循环中出错,怎样能让循环继续?我 try...except了,不行,退出了;
把循环中的代码做在单独一个 procedure 里也不行??!
  for ...... do
  begin
       with query1 do
       begin
             ......
             try
                open;
             except
               ....
       end;
   end;

#7


for ... do
begin
  try
    open;
  except
    continue; //关键
  end;
end; 

#8


nne998(tony)老弟,问题解决了别忘了加分。(你留着也没用,还增加管理员的工作)

#1


delphi的对象模型是基于引用的,而不是基于值的,所以应该这样:

var xx:Ta;
begin
  xx := Ta.Create;
  ...
  xx.Free; //to destroy
end;

#2


也就是说,var中定义的对象,只有内建类型(如:integer、string等),是基于值的,对于程序员自定义类型,都是基于引用的(就像是一个指针)。

#3


同意楼上的高见!你应在用的时候再创建一个实例。

#4


你写的是类,类的实例要通过构造函数来初始化一个对象。而结构是不用,可以直接用。

#5


干吗那么复杂?用Record不就可以了。
type
  Ta=record
    ID:string;
    Name:string;
end;

也不用担心初始化之类的。

#6


多谢各位大侠!!!小弟还有一个问题:

如果循环中出错,怎样能让循环继续?我 try...except了,不行,退出了;
把循环中的代码做在单独一个 procedure 里也不行??!
  for ...... do
  begin
       with query1 do
       begin
             ......
             try
                open;
             except
               ....
       end;
   end;

#7


for ... do
begin
  try
    open;
  except
    continue; //关键
  end;
end; 

#8


nne998(tony)老弟,问题解决了别忘了加分。(你留着也没用,还增加管理员的工作)