C# 两种方法返回的类型不同,没有参数,如何调用?
有一些.net Dll库,此Dll包含一个具有两个同名方法的类,例如:C# 两种方法返回的类型不同,没有参数,如何调用?,c#,.net,visual-studio,obfuscation,ambiguity,C#,.net,Visual Studio,Obfuscation,Ambiguity,有一些.net Dll库,此Dll包含一个具有两个同名方法的类,例如: void b() { } bool b() { } 这在C#中是不可能的,但在内部似乎还可以,在添加这样的库时,如何从代码中调用一个方法 我需要最简单的方法,我知道使用反射是可以的,但是还有其他更简单的方法吗 *编辑* 我在图书馆的元数据中得到了以下信息: #region Assembly XXXX.dll, v xxxx // C:\.................... #endregion namespa
void b()
{
}
bool b()
{
}
这在C#中是不可能的,但在内部似乎还可以,在添加这样的库时,如何从代码中调用一个方法
我需要最简单的方法,我知道使用反射是可以的,但是还有其他更简单的方法吗
*编辑*
我在图书馆的元数据中得到了以下信息:
#region Assembly XXXX.dll, v xxxx
// C:\....................
#endregion
namespace XXXX.YYYYY
{
public class a : IDisposable
{
.
.
.
.
.
public void b();
public bool b();
.
.
.
.
public void Dispose();
}
}
哦,太可怕了。你可以从C#中调用它的唯一方法是通过反射;您可能需要使用
GetMethods()
并从数组中找到所需的方法(GetMethod()
重载可能不喜欢这样)
拥有
MethodInfo
后,您可以使用Invoke
,也可以使用Delegate.CreateDelegate
获取可重复使用的类型化委托。这取决于您调用它的频率,其中哪一个更可取。只有在它们位于两个不同的类中时才有可能,因此请使用类名和名称空间。在内部,什么似乎是可以的?不好。这在C#中是不可能的,我想至少它们不是公共的(因为它们被混淆了)。你想使用反射吗?@lazyberezovsky和gdoron:这在C#中是不可能的,但在CLR和IL中是可能的。模糊处理工具通常会执行这样的操作;如果这是一个模糊化的dll,并且他们已经模糊化了公共API,那么这可能不是您想要的dll。在某个地方应该有一个非模糊的(或者至少在公共API正常的情况下)。当然,如果这是一个C++/CLI dll,或者是用IL编写并用ILASM编译的东西,或者是通过reflection.emit编译的东西,那么:是的,这很难。你确定这是可能的吗@你可以在IL写下,然后使用ILASM,或者你可以用C++编写它;你也可以通过反射来实现。还有其他方法吗:)我知道反射可以做到,但我需要更简单的方法。@MohamedSakherSawan“更简单的方法”是:不要尝试使用模糊的DLL。这是一个病态的边缘案例——C#语言不允许这种情况,也不想让它变得容易。