程序中有一个这样的函数
执行TDatabase.Open;  便执行这样的函数。procedure TDataModule2.dbSalesLogin(Database: TDatabase;
  LoginParams: TStrings);
begin
    GetLoginParams(LoginParams); //在这个函数里获得User Name和Password.
end;我觉得不明白的是,LoginParams使用的值传递的形式。 那么在GetLoginParams
里获得的User Name和Password的值不能被送到外层函数。也就是说dbSalesLogin
函数里的LoginParam还是没有User Name和Password.是不是TStrings有什么特殊的
含义,我的Pascal学得不好,谁能帮我解释一下。谢了!

解决方案 »

  1.   

    请注意一点,过程中简单类型是值传递,符合你说的规则,例如integer, boolean等但是对与对象而言就不是值传递了,因为对象本身可以看做指针,
    所以这里,即使不加var,也是传的对象指针,所以是可以修改对象的数据的!注意,LoginParams:TStrings是对象,而不是普通类型。
      

  2.   

    TStrings没有什么特殊含义,它只是一个类.
    var
    LoginParams: TStrings;
    这儿的参数LoginParams变量实质是一个引用,传入前是假定它已经实例化的.
    比如可以这样用dbSalesLogin(xxxx,Memo1.Lines);这样把一个MEMO编辑框的LINES引用传入,函数体内填写LINES的内容,并没有改变LINES
    这个引用的值.