![](/img/trans.png)
[英]How to access a C# internal property from VB.NET project in same solution?
[英]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/
更新:
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.