overload問題? |
答題得分者是:channel
|
vivi666666
初階會員 發表:83 回覆:94 積分:35 註冊:2003-03-05 發送簡訊給我 |
1:以下 procedure 呼叫 editpick時,傳入參數只有4個參數,可是實際有9個參數
(function EditPick),為什麼可以如此做不是參數一樣?是因為overload,所以可以嗎?如果可以如何對應參數?
2:傳回值variant是什麼意思?
procedure TFmG311.Edit1DblClick(Sender: TObject);
begin
EditPick('select * from AC_ACNTID_PICK', Sender, 'ACNTID', 'ACNTNM');
end; function EditPick(vsql:string;Sender:TObject;sLookupResultFields:string='';
sDescptField:string=''; sTBLNames:string=''; doFilter:boolean=True;
lUseCDS:boolean=False; sCDSName:string=''; sFilterFields:string=''): variant; overload;
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
It is not due to overload. It is becasue of the default parameters, e.g. function f(x: integer; c: integer = 1); f(1) = f(1,1) BTW, you should better avoid overloading function/procedure with default parameters. Quoted from Delphi help: If you use default parameter values in an overloaded routine, avoid ambiguous parameter signatures. Consider, for example, the following. procedure Confused(I: Integer); overload;
...
procedure Confused(I: Integer; J: Integer = 0); overload;
...
Confused(X); // Which procedure is called? In fact, neither procedure is called. This code generates a compilation error. 發表人 - william 於 2003/03/21 11:41:36
|
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
引言: 1:以下 procedure 呼叫 editpick時,傳入參數只有4個參數,可是實際有9個參數 (function EditPick),為什麼可以如此做不是參數一樣?是因為overload,所以可以嗎?如果可以如何對應參數?沒有錯就是overload。 overload是什麼呢?字面上的解釋就是負載的意思。 實際上overload就是可以讓您有許多相同名稱的function、procedure,但是所傳入的參數皆不同。這麼的設計方式就是要讓傳入不同參數、相同功能的function、procedure,能夠取相同的名稱,避免取太多的名稱。當然您也可以不要使用overload,只是您的function、procedure的名稱不同就可以了。 如何對應參數? 這一點您可以不用擔心,Delphi會自動幫您對應參數,就是依您所下的參數去做對應。 例如: function Test(a:Integer,b:String): Variant; function Test(a:Integer): Variant; 在呼叫時: Test(1,'a');Delphi幫您對應到function Test(a:Integer,b:String): Variant; Test(1);Delphi幫您對應到function Test(a:Integer): Variant; 引言: 2:傳回值variant是什麼意思?variant:就是可變的型態。包含Integer、String…甚至是Array皆可。 var V: Variant; begin V := 1; V := 1.0; V := 'String'; V := VarArrayOf(['a','b']); end;~小弟淺見,參考看看~ 發表人 - channel 於 2003/03/21 12:07:25
------
~小弟淺見,參考看看~ |
vivi666666
初階會員 發表:83 回覆:94 積分:35 註冊:2003-03-05 發送簡訊給我 |
引言:如何對應參數?傳入參數只有4個參數與9個參數 (function EditPick),後面5參數是傳空的嗎?引言: 1:以下 procedure 呼叫 editpick時,傳入參數只有4個參數,可是實際有9個參數 (function EditPick),為什麼可以如此做不是參數一樣?是因為overload,所以可以嗎?如果可以如何對應參數?沒有錯就是overload。 overload是什麼呢?字面上的解釋就是負載的意思。 實際上overload就是可以讓您有許多相同名稱的function、procedure,但是所傳入的參數皆不同。這麼的設計方式就是要讓傳入不同參數、相同功能的function、procedure,能夠取相同的名稱,避免取太多的名稱。當然您也可以不要使用overload,只是您的function、procedure的名稱不同就可以了。 如何對應參數? 這一點您可以不用擔心,Delphi會自動幫您對應參數,就是依您所下的參數去做對應。 例如: function Test(a:Integer,b:String): Variant; function Test(a:Integer): Variant; 在呼叫時: Test(1,'a');Delphi幫您對應到function Test(a:Integer,b:String): Variant; Test(1);Delphi幫您對應到function Test(a:Integer): Variant;引言: 2:傳回值variant是什麼意思?variant:就是可變的型態。包含Integer、String…甚至是Array皆可。var V: Variant; begin V := 1; V := 1.0; V := 'String'; V := VarArrayOf(['a','b']); end;~小弟淺見,參考看看~ 發表人 - channel 於 2003/03/21 12:07:25 |
vivi666666
初階會員 發表:83 回覆:94 積分:35 註冊:2003-03-05 發送簡訊給我 |
引言:如何對應參數?傳入參數只有4個參數與9個參數 (function EditPick),後面5參數是傳空的嗎?引言: 1:以下 procedure 呼叫 editpick時,傳入參數只有4個參數,可是實際有9個參數 (function EditPick),為什麼可以如此做不是參數一樣?是因為overload,所以可以嗎?如果可以如何對應參數?沒有錯就是overload。 overload是什麼呢?字面上的解釋就是負載的意思。 實際上overload就是可以讓您有許多相同名稱的function、procedure,但是所傳入的參數皆不同。這麼的設計方式就是要讓傳入不同參數、相同功能的function、procedure,能夠取相同的名稱,避免取太多的名稱。當然您也可以不要使用overload,只是您的function、procedure的名稱不同就可以了。 如何對應參數? 這一點您可以不用擔心,Delphi會自動幫您對應參數,就是依您所下的參數去做對應。 例如: function Test(a:Integer,b:String): Variant; function Test(a:Integer): Variant; 在呼叫時: Test(1,'a');Delphi幫您對應到function Test(a:Integer,b:String): Variant; Test(1);Delphi幫您對應到function Test(a:Integer): Variant;引言: 2:傳回值variant是什麼意思?variant:就是可變的型態。包含Integer、String…甚至是Array皆可。var V: Variant; begin V := 1; V := 1.0; V := 'String'; V := VarArrayOf(['a','b']); end;~小弟淺見,參考看看~ 發表人 - channel 於 2003/03/21 12:07:25 |
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
引言:function EditPick(vsql:string;Sender:TObject;sLookupResultFields:string=''; sDescptField:string=''; sTBLNames:string=''; doFilter:boolean=True; lUseCDS:boolean=False; sCDSName:string=''; sFilterFields:string=''): variant; overload;EditPick('select * from AC_ACNTID_PICK', Sender, 'ACNTID', 'ACNTNM'); is probably NOT using overload. In order to make a confirmation, I think you would better list all overloaded function EditPick. I think in your case it is using [b]default parameters[b]. |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
如 William 所說,九個參數你可以只傳四個,並不是 Overload 的原固,而是 Delphi 語言的另一語法所致 ── 參數預設值。 你看看你的 Function EditPick(...) 九個參數中,尾後七個不是比正常多了 =xxx 嗎,這就是預設值了。 在有預設值的參數來說,若使用者有傳參數,則以使用者所傳的為準,若沒有,則以預設值為參數值。所以 EditPick('select * from AC_ACNTID_PICK', Sender, 'ACNTID', 'ACNTNM'); 就等於 EditPick('select * from AC_ACNTID_PICK', Sender, 'ACNTID', 'ACNTNM', '', True, False, '', ''); Varient 的使用時機就是當你不知道該變數會是甚麼形態時,就可以用這個萬用形態。例如 Locate 第二個參數是要找尋的欄位值,有很多種不同形態的可能所以便用 Varient 了。 可以,由於 Varient 會非常沒效能的一種形態,可以不用時就不應使用。
|
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
引言: 如何對應參數?傳入參數只有4個參數與9個參數 (function EditPick),後面5參數是傳空的嗎? function EditPick(vsql:string;Sender:TObject;sLookupResultFields:string=''; sDescptField:string=''; sTBLNames:string=''; doFilter:boolean=True; lUseCDS:boolean=False; sCDSName:string=''; sFilterFields:string=''): variant; overload;除了第一、二個參數vsql:string; Sender:TObject之外其餘的參數皆有預設值,所以後面5參數是傳空的嗎?也可以這麼說,但應該說是傳預設值比較正確。 ~小弟淺見,參考看看~
------
~小弟淺見,參考看看~ |
vivi666666
初階會員 發表:83 回覆:94 積分:35 註冊:2003-03-05 發送簡訊給我 |
引言:Sender是傳入什麼?引言: 如何對應參數?傳入參數只有4個參數與9個參數 (function EditPick),後面5參數是傳空的嗎? function EditPick(vsql:string;Sender:TObject;sLookupResultFields:string=''; sDescptField:string=''; sTBLNames:string=''; doFilter:boolean=True; lUseCDS:boolean=False; sCDSName:string=''; sFilterFields:string=''): variant; overload;除了第一、二個參數vsql:string; Sender:TObject之外其餘的參數皆有預設值,所以後面5參數是傳空的嗎?也可以這麼說,但應該說是傳預設值比較正確。 ~小弟淺見,參考看看~ |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |