2013-06-13 75 views
6

我有一個C#編譯的類項目a.dll。它包含以下代碼。如何調用在C#中定義的函數具有相同的參數,返回類型和相同的名稱,但與VB.NET項目不同的情況下

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) 

如果這段代碼的工作原理是如何編譯器識別正確的函數?

+0

爲什麼不重命名添加到AddAndDouble? – Andy

+0

+1好邏輯!但違反CLS指南 –

回答

5

最好的辦法是在這裏使用反射 - VB根本無法確定哪些功能,因爲在VB中「添加」您所呼叫是相同的「添加」。

這裏就是我所做的測試它(我真的不知道「的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}) 
+0

我只是簡化了它 - 你不需要單獨的程序集加載 - 它已經加載,所以只需使用'GetType'。 –

+0

謝謝。它是一個正確的答案。 – kbvishnu

2

如果你的C#代碼是CLS兼容,你可以簡單地對它的引用添加到您的vb.net project.namespace,在DLL公共成員可以acessed


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

您也可以使用免費的在線convesion工具。
如: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

+0

我添加了參考以及如何調用該函數? – kbvishnu

+0

你可以檢查更新的問題 – kbvishnu

+0

我不認爲這與問題有關.. – Andy

1

其實VB不會讓你打電話或者Add方法的名字。您將收到編譯器錯誤,指出名稱Add不明確。給兩個公開成員名稱僅根據情況不同而不符合CLS。調用編寫C#類的人並告訴他們使用符合CLS的名稱。如果他們不這樣做,那麼你將不得不採取反思。

+0

同意你的意見。 +1 :)這個問題是一個面試問題,問我的朋友,他檢查了我的解決方案。謝謝 – kbvishnu

+0

@VeeKayBee請讓我知道如果我有工作:) –

+0

當然。他被選中,但他對他的問題的答案沒有任何想法 – kbvishnu

相關問題