簡體   English   中英

有歧義,因為接口中存在多種同名成員

[英]Ambiguous because multiple kinds of members with this name exist in interface

這是界面:

Namespace IBasBS100
    Public Interface IBasBSMoedas <DispId(0)> <Obsolete("This method is obsolete. Use Actualiza(BasBE100.BasBEMoeda objMoeda, ref string strAvisos) instead.", False)>
        Sub Actualiza(objMoeda As BasBEMoeda, Optional strAvisos As String = "")
        <DispId(18)>
        Sub Actualiza(objMoeda As BasBEMoeda, ByRef strAvisos As String)
        <DispId(2)>
        

當我嘗試調用未貶低的 function 時,它給了我模棱兩可的錯誤消息:

   Dim avisos As String
   Dim bsmoedas As IBasBSMoedas = MotorPRI.Base.Moedas
   bsmoedas.Actualiza(m, avisos)

我認為它調用了 depracated 方法。 有什么方法可以顯式調用非棄用方法“Actualiza(objMoeda As BasBEMoeda, ByRef strAvisos As String)”?

PS:我無法更改界面,它是一個外部庫

我只能假設接口代碼是在 C# 中編寫的,因為該 VB 代碼無法編譯。 在 VB 中,通過引用傳遞參數時不會顯式 state,因此在 VB 代碼中調用一個方法時無法區分這兩種方法。 在 C# 中,您在通過引用傳遞參數時指定refout關鍵字,因此您調用的重載沒有歧義,因此是允許的。

簡而言之,您不能在 VB 中調用該接口方法。 您可以在 VB 中的 class 中實現該接口,並為其中一種方法使用不同的名稱,但您仍然必須通過 class 調用它,而不是通過接口。 如果您希望能夠使用該接口,那么您將不得不在 C# 代碼中進行操作。 也許在 C# 中為使用該接口的代碼編寫一個庫,然后在您的 VB 應用程序中使用它。

我想在 VB 中執行此操作的另一種方法是通過反射來執行此操作。 遠非理想,但我看不到另一種方式。

Primavera v10 功能和 VisualBasic 彼此不兼容,有些可能有效,但我不會建議更改為 C#,因為它是 primavera 的“支持”語言

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM