像这样的想法不知怎么实现。
procedure A(x : Tx);
参数x的类型是动态改变的,而且参数x的类型都是自定义的类型。
那么又如何声明过程呢?我不想因为参数不一样写很多类似的过程。

解决方案 »

  1.   

    我调用的时候如:
    procedure A(x : variant);
    ...
    ... 
    procedure B(Sender: TObject);
    begin
     A(y);//y为自定义的record类型
    end;提示错误:类型不兼容
    应该如何写?
      

  2.   

    自定义类型是类的话可以TObject作参数;
    还可以用Pointer型;下面这种不知道可不可以,好像行啊,试一下
    Procedure fuk(var a)
      

  3.   

    因为delphi并不是真正意义上的面向对象的编程语言,或许在java中可以实现!!
      

  4.   

    delphi中类型不能作为参数传递,c++中可以;可以使用指针,用另外的参数区别类型;variant只对基本类型有用
      

  5.   

    Tx设为Point类型,再多传递一个参数,
    用此参数标识该Point的类型,再作处理,不知道这样行不行
      

  6.   

    我的天哪,上面是哪位老兄说Delphi并不是真正的面向对象的编程语言?
      

  7.   

    使用无类型的参数:
    procedure A(var params);具体使用可以参考op手册。
      

  8.   

    如果是从tobject 派生的参数应该可以用tobject吧
      

  9.   

    Untyed parameters(无类型参数)
    当声明var、const 和out 参数时,你可以省略类型说明(数值参数必须指定类型)。比如,
    procedure TakeAnything(const C);
    声明一个叫做TakeAnything 的过程,它可以接受任何类型的参数。当你调用这样一个例程时,你不能向
    它传递numeral or untyped numeric constant。
    在过程体或函数体中,无类型参数和每个类型都不兼容。要对一个无类型参数进行操作,你必须对它进
    行转换。通常,编译器不会对无类型参数检验它的有效性。
    下面的例子在Equal 函数中使用无类型参数,这个函数比较两个参数中指定数目的字节。
    function Equal(var Source, Dest; Size: Integer): Boolean;
    type
    TBytes = array[0..MaxInt - 1] of Byte;
    var
    N: Integer;
    begin
    N := 0;
    while (N < Size) and (TBytes(Dest)[N] = TBytes(Source)[N]) do
    Inc(N);
    Equal := N = Size;
    end;
    给定下面的声明
    type
    TVector = array[1..10] of Integer;
    TPoint = record
    X, Y: Integer;
    end;
    var
    Vec1, Vec2: TVector;
    N: Integer;
    P: TPoint;
    你可以如下调用Equal:
    Equal(Vec1, Vec2, SizeOf(TVector)) // 比较Vec1 和Vec2
    Equal(Vec1, Vec2, SizeOf(Integer) * N) // 比较Vec1 和Vec2 的前N 个元素
    Equal(Vec1[1], Vec1[6], SizeOf(Integer) * 5) // 比较Vec1 的前5 个元素和后5 个元素
    Equal(Vec1[1], P, 4) // 比较Vec1[1]和P.X、Vec1[2]和P.Y
      

  10.   

    建议有语法问题的兄弟先去温习一下delphi附带的op手册,网上有中文版下载。