C# 字符串到我可以从中调用函数的类

发布于 2024-10-08 15:44:13 字数 370 浏览 3 评论 0原文

关于 在 c# 中通过字符串变量初始化类? 我已经找到了如何使用字符串创建一个类

,所以我已经拥有的是:

Type type = Type.GetType("project.start");
var class = Activator.CreateInstance(type);

我想要做的是调用此类上的函数,例如:

class.foo();

这可能吗?如果是的话怎么办?

on initialize a class by string variable in c#? I already found out how to create an class using a string

so what I already have is:

Type type = Type.GetType("project.start");
var class = Activator.CreateInstance(type);

what I want to do is call a function on this class for example:

class.foo();

is this possible? and if it is how?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

北方的巷 2024-10-15 15:44:14
Type yourType = Type.GetType("project.start");
object yourObject = Activator.CreateInstance(yourType);

object result = yourType.GetMethod("foo")
                        .Invoke(yourObject, null);
Type yourType = Type.GetType("project.start");
object yourObject = Activator.CreateInstance(yourType);

object result = yourType.GetMethod("foo")
                        .Invoke(yourObject, null);
冰雪之触 2024-10-15 15:44:14

如果您可以假设该类实现了公开 Foo 方法的接口或基类,则适当地转换该类。

public interface IFoo
{
   void Foo();
}

然后在您的调用代码中您可以执行以下操作:

var yourType = Type.GetType("project.start");
var yourObject = (IFoo)Activator.CreateInstance(yourType);

yourType.Foo();

If you can assume that the class implements an interface or base class that exposes a Foo method, then cast the class as appropriate.

public interface IFoo
{
   void Foo();
}

then in your calling code you can do:

var yourType = Type.GetType("project.start");
var yourObject = (IFoo)Activator.CreateInstance(yourType);

yourType.Foo();
世俗缘 2024-10-15 15:44:14

这是可能的,但您必须使用反射或在运行时将 class 强制转换为正确的类型。

反射示例:

type.GetMethod("foo").Invoke(class, null);

It is possible but you will have to use reflection or have class be cast as the proper type at runtime..

Reflection Example:

type.GetMethod("foo").Invoke(class, null);
云胡 2024-10-15 15:44:14

Activator.CreateInstance 返回一种对象类型。如果您在编译时知道类型,则可以使用通用的 CreateInstance。

Type type = Type.GetType("project.start");
var class = Activator.CreateInstance<project.start>(type);

Activator.CreateInstance returns a type of object. If you know the type at compile time, you can use the generic CreateInstance.

Type type = Type.GetType("project.start");
var class = Activator.CreateInstance<project.start>(type);
隔岸观火 2024-10-15 15:44:14
var methodInfo = type.GetMethod("foo");
object result  = methodInfo.Invoke(class,null);

Invoke 方法的第二个参数是方法参数。

var methodInfo = type.GetMethod("foo");
object result  = methodInfo.Invoke(class,null);

The second argument to the Invoke method are the method parameters.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文