簡體   English   中英

如何使用相同的參數調用在C#中定義的函數,返回類型和相同的名稱,但在不同的情況下調用VB.NET項目

[英]How to call a function defined in C# with same params,return type and same name but in different case from a VB.NET project

我有一個用C#編譯的類項目a.dll。 它包含以下代碼。

public class MyClass{
    public int Add(int i,int j)
    {
      return (i+j);
    }

    public int add(int i,int j)
    {
      return (i+j)*2;
    }
}

從C#項目中我可以像這樣調用這些函數

public class MyOtherClass{
 MyClass mcls=new MyClass();
 mcls.Add(1,2);
 mcls.add(2.3);
}

但是如何從VB.Net Project調用它呢? 我現在無法使用Visual Studio。 因此,如果有人提供答案,那將非常有幫助。

編輯1

我有一個VB.NET項目,我需要添加一個C#dll的引用( say dll contains MyClass )。所以我可以調用兩個方法( Add(int,int) , add(int,int) )。 但在VB.NET中,這是區分大小寫的。 有沒有辦法實現這個目標?

編輯2

假設我添加了對dll的引用,因此我可以調用這些函數。

Dim myObj as New MyClass
myObj.Add(1,2)
myObj.add(1,2)

如果此代碼有效,編譯器如何識別正確的函數?

你最好的選擇是在這里使用反射 - VB根本無法確定你正在調用哪個函數,因為在VB中'add'與'Add'相同。

這是我測試它所做的(我不確定你需要在哪里組合'BindingFlags'):

Dim mcls As New [MyClass]
Dim t As Type = mcls.GetType()
Dim x = t.InvokeMember("add", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.InvokeMethod, Nothing, mcls, New Object() {1, 2})
Dim y = t.InvokeMember("Add", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.InvokeMethod, Nothing, mcls, New Object() {1, 2})

如果您的C#代碼符合CLS,您可以簡單地將它的引用添加到您的vb.net project.namespace,DLL中的公共成員可以被訪問


更多這里
http://www.christec.co.nz/blog/archives/290

您也可以使用免費的在線交流工具。
例如: http//www.developerfusion.com/tools/convert/vb-to-csharp/

更新:

閱讀http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/dda8d7cb-0fa1-43d6-a90f-6c4bed0b40bb

Dim c As New MyClass()
MsgBox(c.Add(1, 2)) 'if only Add() is Available


update2: * 如上所述鏈接注: *

此外,在C#項目中,將以下內容添加到AssemblyInfo.cs:

using System;

// etc

[assembly: CLSCompliant(true)]

UPDATE3:

正如我上面所說,你想確保你的C#代碼符合CLS
C#區分大小寫,而VB.NET則不區分大小寫 違反了 CLS指南
請注意update2以確保符合標准

最后我找到了很久以前引導我的文章

http://www.devarticles.com/c/a/C-Sharp/Making-Your-Code-CLS-Compliant/

UPDATE4:

另一個范圍 http://msdn.microsoft.com/en-us/magazine/cc163750.aspx

實際上VB不允許你按名稱調用Add方法。 您將收到編譯器錯誤,指示名稱Add不明確。 提供兩個僅因案例而異的公共成員名稱不符合CLS。 調用編寫C#類的人並告訴他們使用符合CLS的名稱。 如果他們不這樣做,那么你將不得不求助於反思。

暫無
暫無

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

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