首先簡短說明在delphi中var的作用。
var關鍵字在delphi 中是再普通不過的乙個關鍵字, 大家都知道它的作用就是說明其後定義的是變數,區域性變數不能在定義是賦初值, 全域性變數可以設初值。
技術手冊中如是 描述: 全域性變數會被初始化, 如integer型會被初始化為0 , 字串為空,物件為nil。 但是區域性變數不會被初始化。
而我在這裡說的不是這些。 因為我碰到了乙個問題。 是這樣的,在乙個類中有乙個屬性,
象這樣:
ta = class
private
fp1 : integer;
public
property p1: integer read fp1 write fp2;
end;
如果如此有個方法,procedure setsomeone(var tmp : integer);
這樣使用這個方法;
var
a: ta;
begin
a := ta. create;
假設 ta在create時 fp1已經賦值了。
那麼呼叫:
setsomeone(a.p1);
則提示錯誤。
constant object cannot be passed as var parameter
我的英語很差, 應該翻譯如下:常量物件不能作為變參傳遞
如果去掉 setsomeone引數中的var 則編譯通過。
經過我的研究和測試最終找到了答案, 在方法引數中var很重要,乙個方法如果沒有返回值即procedure,那麼它傳遞引數的可能只有方法引數, 那麼必須設定要傳遞的引數為var。 否則永遠得不到想要的結果。
物件的屬性(property)不能作為變參(var)。 必須定義乙個中間變數來傳遞給property,否則提示錯誤。
C 中的var關鍵字
var 是3.5新出的乙個定義變數的型別 其實也就是弱化型別的定義 var可代替任何型別 編譯器會根據上下文來判斷你到底是想用什麼型別的 至於什麼情況下用到var 我想就是你無法確定自己將用的是什麼型別 就可以使用var 類似 object 但是效率比object高點。或者通俗的講 var可以理解為...
C 中的var關鍵字
c 中的var關鍵字 var 是3.5新出的乙個定義變數的型別 其實也就是弱化型別的定義 var可代替任何型別 編譯器會根據上下文來判斷你到底是想用什麼型別的 至於什麼情況下用到var 我想就是你無法確定自己將用的是什麼型別 就可以使用var 類似 object 但是效率比object高點。或者通俗...
C 的var關鍵字
var 是3.5新出的乙個定義變數的型別 其實也就是弱化型別的定義 var可代替任何型別 編譯器會根據上下文來判斷你到底是想用什麼型別的 至於什麼情況下用到var 我想就是你無法確定自己將用的是什麼型別就可以使用var 類似 object但是效率比object高點 使用var定義變數時有以下四個特點...