2014-04-03 162 views
1

调用System.IO.ReadAllBytes这篇文章涉及到Visual Basic .NET 2010通过字符串名称

所以,我想知道是否有任何方式的字符串来调用从库中的函数,例如System.ReadAllBytes名称。

我一直在尝试Assembly.GetExecutingAssembly().CreateInstanceSystem.Activator.CreateInstance其次是CallByName(),但他们都没有工作。我怎么试了一下

例子:

Dim Inst As Object = Activator.CreateInstance("System.IO", False, New Object() {}) 
Dim Obj As Byte() = DirectCast(CallByName(Inst, "ReadAllBytes", CallType.Method, new object() {"C:\file.exe"}), Byte()) 

帮助是(一如既往)大加赞赏

+1

那么这就是奇。你的意思是创建一个'System.IO'的实例吗?这是一个命名空间......当然你的意思是创建一个'System.IO.FileStream'的实例(文件名作为参数),然后调用'ReadAllBytes' ......但是你为什么还要考虑Reflection? – MrPaulch

回答

6

这是System.IO.File.ReadAllBytes(),你错过了 “文件” 的一部分。这是一个共享方法,CallByName语句不够灵活,无法调用这些方法。您将需要使用.NET中提供的更通用的Reflection。它看起来像这样为您具体的例子,阐明了清晰:

Imports System.Reflection 

Module Module1 
    Sub Main() 
     Dim type = GetType(System.IO.File) 
     Dim method = type.GetMethod("ReadAllBytes") 
     Dim result = method.Invoke(Nothing, New Object() {"c:\temp\test.bin"}) 
     Dim bytes = DirectCast(result, Byte()) 
    End Sub 
End Module 
+0

我以System.IO.File.ReadAllBytes()为例,如果类需要实例化,我还会使用相同的方法吗? –

+0

是的。在Invoke()调用中传递类对象而不是* Nothing *。 –

+0

但是,如果System.IO.File也需要在字符串中,那么甚至可能或者我只是在这里做白日梦? –

相关问题