none
C# 改寫為 VB RRS feed

  • 問題

  • 小弟因需跟SAP連接,在測試的過程發現C#無法傳輸table類型的參數,必需由VB做成class給C#引用

    所以以下的code需改寫成VB,在C#裡確定沒有問題改寫成VB後卻一直產生介面必須實做的錯誤

    專案為C#與VB共存,兩隻code皆為class

    請問各位先進小弟VB的CODE哪裡有誤,請不吝指教

    c#部分

    public class MyBackendConfig : IDestinationConfiguration
        {
            public RfcConfigParameters GetParameters(String destinationName)
            {
                if ("PRD_000".Equals(destinationName))
                {
                    RfcConfigParameters parameters = new RfcConfigParameters();
                    parameters.Add("SAPROUTER", "xxx");
                    parameters.Add("ASHOST", "xxx");
                    parameters.Add("SYSNR", "xxx");
                    parameters.Add("USER", "xxx");
                    parameters.Add("PASSWD", "xxx");
                    parameters.Add("CLIENT", "xxx");
                    parameters.Add("POOL_SIZE", "xxx");
                    parameters.Add("MAX_POOL_WAIT_TIME", "xxx");
                    parameters.Add("IDLE_TIMEOUT", "xxx");
                    parameters.Add("SYSID", "xxx");
                    return parameters;
    
                }
                else return null;
            }
            public bool ChangeEventsSupported()
            {
                return false;
            }
            public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged;
        }


    VB部分

    Implements IDestinationConfiguration

    錯誤訊息:class MyBackendConfig必須針對介面SAP.Middleware.Connector.IDestinationConfiguration實做Public Function ChangeEventsSupported() As Boolean介面

        Public Class MyBackendConfig
            Implements IDestinationConfiguration
            Public Function GetParameters(ByVal destinationName As String) As RfcConfigParameters
                If "SAPDestination".Equals(destinationName) Then
                    Dim parameters As RfcConfigParameters = New RfcConfigParameters()
                    parameters.Add("SAPROUTER", "xxx")
                    parameters.Add("ASHOST", "x.x.x.x")
                    parameters.Add("SYSNR", "xx")
                    parameters.Add("USER", "xxx")
                    parameters.Add("PASSWD", "xxx")
                    parameters.Add("CLIENT", "xxx")
                    parameters.Add("POOL_SIZE", "x")
                    parameters.Add("MAX_POOL_WAIT_TIME", "x")
                    parameters.Add("IDLE_TIMEOUT", "xx")
                    parameters.Add("SYSID", "xxx")
                    Return parameters
                Else
                    Return Nothing
                End If
            End Function
    
            Public Function ChangeEventsSupported() As Boolean
                Return False
            End Function
    
            Public Event ConfigurationChanged As RfcDestinationManager.ConfigurationChangeHandler
        End Class



    • 已編輯 鳥樂 2012年9月14日 下午 04:44
    2012年9月14日 上午 10:42

解答

  • (1) 第一件事, 請勿重複發文, 另一篇我就先刪了.

    (2) 你上下兩個 code 都是 Visual Basic ,  沒有看到 C# 在哪裡

    (3) 在 Visual Basic 中由介面實做的方法在後面會帶上一些關鍵字, 如:

    Public Interface Interface1
    	Sub test()
    End Interface
    
    Public Class TestClass
    	Implements Interface1
    
    
    	Public Sub test() Implements Interface1.test
    
    	End Sub
    End Class
    

    最簡單的方式就是, 先把你原來複製過來的 ChangeEventsSupported 註解掉, 然後把滑鼠指標移向 Implements IDestinationConfiguration 的結尾, 按 enter 鍵, 就會出現了

    (4) 寫程式總要了解一些原則與道理, 不是 Copy & Paste 就好了.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年9月14日 上午 10:57
    版主

所有回覆

  • 你貼的兩支程式都是 VB 啊?

    學習不是查個 Google 套個書上的範例就算了,而是去熟悉了解每個程式碼背後的意義,否則就算學個幾百年,它也不會是你的。

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2012年9月14日 上午 10:55
    版主
  • (1) 第一件事, 請勿重複發文, 另一篇我就先刪了.

    (2) 你上下兩個 code 都是 Visual Basic ,  沒有看到 C# 在哪裡

    (3) 在 Visual Basic 中由介面實做的方法在後面會帶上一些關鍵字, 如:

    Public Interface Interface1
    	Sub test()
    End Interface
    
    Public Class TestClass
    	Implements Interface1
    
    
    	Public Sub test() Implements Interface1.test
    
    	End Sub
    End Class
    

    最簡單的方式就是, 先把你原來複製過來的 ChangeEventsSupported 註解掉, 然後把滑鼠指標移向 Implements IDestinationConfiguration 的結尾, 按 enter 鍵, 就會出現了

    (4) 寫程式總要了解一些原則與道理, 不是 Copy & Paste 就好了.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年9月14日 上午 10:57
    版主
  • C#, VB最後都是CLR在執行,

    照理說,

    VB能做的事,C#也能,反之亦然。


    理直氣和,切記。

    http://blog.kkbruce.net

    2012年9月14日 下午 01:12
  • 抱歉複製錯,已在發文處更正

    感謝各位先進的指教,用了Bill Chung指導的方法已經完成
    因為以前寫VB時經驗尚淺,只用到if else for,對繼承甚至多型之類稍微進階的方法完全不了解
    所以就算知道C#  Class A:B是繼承,卻不知道VB內Class Implements 後還要在每個實做後指定function name
    Bill Chung大教訓的是,寫程式總要了解一些原則與道理, 不是 Copy & Paste 就好了.

    KKBurce大提到的問題我也很疑惑,framework底下的任何語法執行時都是由同樣的CLR在跑
    但實際上就是只有VB.net可以對RFC傳table類型的參數,C#加入第二個欄位就會出錯
    我沒有時間去探討,只能先解決眼前的問題,很慚愧但是現實就是如此

    再度感謝各位先進指教!!!

    2012年9月14日 下午 03:22