Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c字符串到我可以从中调用函数的类_C#_Activator_Createinstance - Fatal编程技术网

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();