procedure   Move( const Source; var Dest; count : Integer );
这是SYSTEM单元的一个函数,请问函数申明不定义传参的类型时,是什么意思,在什么情况下常用

解决方案 »

  1.   

    就是可以传递任意类型的参数, var要求变量
      

  2.   

    这好像是任意类型吧。
    如:move(str1,str2,length(str1));
        move(str1[1],str2[1],length(str1));
    是一样的。就是说你可以传指针或者传变量名。move()它自动转换。
      

  3.   

    无类型参数理论上可以接收任何类型的值,但往往是有限制的。
    比如常用的SetLength过程,它的声明为:
        procedure SetLength(var S; NewLength: Integer);
    其中的S可以是字符串或是动态数组。
    因此,当变量可以接受的类型不定时,可以使用无类型参数。
      

  4.   

    回复人: alphax(无之心) 
    是在说我吗??
      

  5.   

    在DELPHI中类变量的应用太多了,这正是 OO 方法虚函数和多态型的典型应用。
      

  6.   

    看看application.creatform的原代码:
    procedure TApplication.CreateForm(InstanceClass: TComponentClass; var Reference);
    var
      Instance: TComponent;
    begin
      Instance := TComponent(InstanceClass.NewInstance);
      TComponent(Reference) := Instance;
      try
        Instance.Create(Self);
      except
        TComponent(Reference) := nil;
        raise;
      end;
      if (FMainForm = nil) and (Instance is TForm) then
      begin
        TForm(Instance).HandleNeeded;
        FMainForm := TForm(Instance);
      end;
    end;由于动态连编(Dynamic binding)的原因,实际运行中,会根据
    不同的类的类型(虚方法表 VMT)调用不同的构造函数,从而构造出不同的类的实例。
      InstanceClass: TComponentClass; 作为参数传递进来,其实就可以把它看作是一个虚方法
    表的指针,对 Instance.Create 的调用,其实就是在这个 VMT 中查找 Create 方法的地址,
    然后调用这个地址处的 Create 方法。传入不同的类型(VMT),就能够调用不同的 Create 方法。
    这就是 OO 方法 Dynamic binding 的实质!
      

  7.   

    回复人: dickeybird888(于伟刚) ( ) 信誉:116 你好像回错贴了吧?