C# c字符串到我可以从中调用函数的类
在上,我已经了解了如何使用字符串创建类 所以我已经有了:C# c字符串到我可以从中调用函数的类,c#,activator,createinstance,C#,Activator,Createinstance,在上,我已经了解了如何使用字符串创建类 所以我已经有了: Type type = Type.GetType("project.start"); var class = Activator.CreateInstance(type); 我想做的是调用此类上的函数,例如: class.foo(); 这可能吗?如果是这样的话?这是可能的,但您必须在运行时使用反射或将类转换为正确的类型 Type yourType = Type.GetType("project.start"); object your
Type type = Type.GetType("project.start");
var class = Activator.CreateInstance(type);
我想做的是调用此类上的函数,例如:
class.foo();
这可能吗?如果是这样的话?这是可能的,但您必须在运行时使用反射或将类转换为正确的类型
Type yourType = Type.GetType("project.start");
object yourObject = Activator.CreateInstance(yourType);
object result = yourType.GetMethod("foo")
.Invoke(yourObject, null);
反射示例:
type.GetMethod("foo").Invoke(class, null);
这是可能的,但您必须在运行时使用反射或将类转换为正确的类型 反射示例:
type.GetMethod("foo").Invoke(class, null);
Activator.CreateInstance返回一种类型的对象。如果您在编译时知道类型,那么可以使用泛型CreateInstance
Type type = Type.GetType("project.start");
var class = Activator.CreateInstance<project.start>(type);
Activator.CreateInstance返回一种类型的对象。如果您在编译时知道类型,那么可以使用泛型CreateInstance
Type type = Type.GetType("project.start");
var class = Activator.CreateInstance<project.start>(type);
Invoke方法的第二个参数是方法参数
Invoke方法的第二个参数是方法参数。如果可以假设该类实现了一个公开Foo方法的接口或基类,则可以根据需要强制转换该类
public interface IFoo
{
void Foo();
}
然后在您的呼叫代码中,您可以执行以下操作:
var yourType = Type.GetType("project.start");
var yourObject = (IFoo)Activator.CreateInstance(yourType);
yourType.Foo();
如果可以假设该类实现了一个接口或基类,该接口或基类公开了一个Foo方法,那么根据需要强制转换该类
public interface IFoo
{
void Foo();
}
然后在您的呼叫代码中,您可以执行以下操作:
var yourType = Type.GetType("project.start");
var yourObject = (IFoo)Activator.CreateInstance(yourType);
yourType.Foo();