2011-09-20 32 views
1

我有一些功能,是否通過後期綁定或執行該加法運算不進行加法運算變量數據類型在VB6中通過後期綁定執行加法操作嗎?

Public Function Sum(value1, value2) 
    Sum = value1 + value2 
End Function 

或僅當我在變體數據類型上調用某種方法時才執行後期綁定,而不是在二進制操作時執行後期綁定?

我也想知道是在VB .NET中添加對象數據類型(選項嚴格關閉),C#中的動態數據類型時使用的晚期綁定。

謝謝。

+0

呃,遲到/早期綁定對數學運算符沒有影響。你能重新解釋一下這個問題嗎? – Deanna

+0

+是數學運算,如果我們正在處理的數字類型,而不是字符串或變體(我認爲是這樣...) –

+0

那麼晚/早綁定進入它呢? – Deanna

回答

2

這與早/晚綁定無關。我認爲你指的是value1value2的數據類型?問題是,然而,令人困惑,因爲它被標記VB6,但你用Return這是不是在VB6

有效的關鍵字在VB6的情況下,兩個value1value2會變種,因此他們可能是數字或字符串(或者甚至是對象) 。該功能還將返回一個Variant

  • 如果你調用該函數有兩個字符串 - 總和結果將是連接字符串:value1value2
  • 如果在兩個數值通過,則總和將是算術和價值觀:value1 + value2

是始終是最好的避免這種類型的節目內容,並確定您需要,以防止意外的結果類型

編輯:

從MS VB.NET文檔但這是VB6很相似:

+運算符(Visual Basic)中具有將兩個數的主要目的。但是,它也可以將數字操作數與字符串操作數連接起來。 +運算符有一套複雜的規則,用於確定是否添加,連接,發出編譯器錯誤的信號,還是拋出運行時InvalidCastException異常。

這與早期或晚期綁定無關,因爲這是與編譯器知道對象在編譯時(早期綁定)具有哪些方法,屬性和事件以及編譯時不知道這些方法,屬性和事件(晚期綁定)

後者可以導致運行時錯誤,因爲你可能打錯一個方法名和編譯器不能挑選,直到它嘗試執行行,並不能找到您所鍵入的方法。看看下面的更多信息:Early vs Late Binding

+0

對不起,我忘了VB6沒有返回,但是問題與VB6有關:) –

+0

@Artyom我的答案對於VB6是正確的 - 我是否正確地回答了你所問的問題? –

+0

我沒有使用這種類型的編程,我只是想知道這裏發生了什麼。據我所知,一切都是在運行時完成的。檢查兩個值的類型,然後決定如何對這些數據類型進行加法運算。所以我想知道,這個過程是一個晚期的約束。如果不是,那麼它是什麼? –

1

在你的函數中進行一個晚期綁定調用的唯一情況是當其中一個Variant參數是一個對象引用時。當評估+運算符(或任何其他表達)上的基準參數,第一其DISPID_VALUE(0)構件被稱爲後期綁定(通過IDispatch::Invoke)和RETVAL在表達式中使用。如果retval是一個IDispatch引用,則它的遞歸調用DISPID_VALUE。這就是爲什麼你可以使用recordset("ID"),而不是recordset.Fields.Item("ID").Value表達式(種)。

如果在表達式(例如+運算符)中使用了已知類型(接口)的顯式對象引用,編譯器會發出調用默認屬性早期綁定的代碼,這會在運行時導致更簡單的評估。

相關問題