【发布时间】:2014-07-14 16:14:36
【问题描述】:
我已经查看了这个链接,但我似乎无法让它工作
Creating a New control of the same type as another control that is already declared
我也通过搜索尝试过:
Dim ClassToCreate As String = "TestClass1.CountItems"
Dim myInstance = Activator.CreateInstance(Type.GetType(ClassToCreate), True)
错误是:
"Value cannot be null.
Parameter name: type"
问题: 我有多个类,并想更改基于字符串调用的类。 (例子当然不正确)
Dim strClassToCall = "TestClass1.CountItems"
'然后将字符串转换为实际的类,这样就可以这样调用它:
Dim strResult = TestClass1.CountItems(strSomeParameter)
感谢您的帮助!
【问题讨论】:
-
我建议不要使用反射......为什么不让所有类都实现一个接口,这样你就可以调用接口的方法而不是试图乱用反射?
-
谢谢安德烈,只是为了确认一下,这个接口将是它自己的一个类,然后会从 CASE 或 ELSEIF 类型的东西中调用该类??
-
您不需要 Case 或 If 语句。由于您的所有类都将在您的接口中实现该方法,因此您可以调用它。假设您有一个名为
ICommunicate的接口(接口通常以 I 开头)。这个接口只有一个方法:Talk()。然后,您创建实现此接口的类Dog和类Person。由于它们都实现了ICommunicate,因此您可以在其中任何一个上调用 Talk() 方法。 (您可以将ICommunicate对象作为函数的参数接收,而不是Person或Dog,因此您可以独立于类调用Talk()) -
根据您的示例,TestClass1.CountItems 似乎是一个函数,而不是一个类。
-
Type.GetType(ClassName) 和 classType.InvokeMember