kbv*_*hnu 6 .net c# vb.net c#-to-vb.net
我有一个用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;
}
}
Run Code Online (Sandbox Code Playgroud)
从C#项目中我可以像这样调用这些函数
public class MyOtherClass{
MyClass mcls=new MyClass();
mcls.Add(1,2);
mcls.add(2.3);
}
Run Code Online (Sandbox Code Playgroud)
但是我怎么能从这个叫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)
Run Code Online (Sandbox Code Playgroud)
如果此代码有效,编译器如何识别正确的函数?
你最好的选择是在这里使用反射 - 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})
Run Code Online (Sandbox Code Playgroud)