【问题标题】:Cast object to actual class dynamically将对象动态转换为实际类
【发布时间】:2014-11-06 03:30:01
【问题描述】:

基于这篇文章:Instantiate a class from its textual name

我正在尝试访问实例化对象内部的方法,但它仍然是一个对象。我们知道必须先转换它,然后才能访问该方法。就我而言,我不能做演员,因为班级是动态的。有什么解决办法吗?

到目前为止,我的代码与上面的帖子没有什么不同。我只需要实例化后调用方法即可。

提前致谢

【问题讨论】:

  • 请向我们展示您的代码。
  • 不确定你是什么意思......所以你在运行时有类名,作为一个字符串,一旦你得到它的一个实例,使用反射,你想要转换它(如在编译时间)?如果您已经知道要在编译时转换为的类型,那这没有意义。请添加有关您要解决的实际问题的更多详细信息。

标签: c# .net


【解决方案1】:

当通常的类型安全方法不适用时,您至少有两个动态调用方法的选项:

dynamic o = GetSomeObject();

o.SomeMethod();

或:

object o = GetSomeObject();
MethodInfo mi = o.GetType().GetMethod("SomeMethod");

mi.Invoke(o);

请注意,前者更简单,并且受益于后一个示例中没有的一些编译器和运行时支持(包括动态绑定的缓存)。

【讨论】:

    【解决方案2】:

    您是否尝试过将对象实现为接口?

    或者你也可以使用'as'关键字

    MyClass test = regularobject as MyClass;
    

    【讨论】:

    • 我认为你误解了这个问题。
    • 我不知道是否有人会清楚地理解这个问题,但如果我不得不猜测,关于使用接口的建议似乎可能是她/他正在寻找的......但它是确实仍然很难在没有澄清问题的情况下说。
    • @SimonWhitehead:在科迪的辩护中,这个问题根本不清楚。完全有可能当代码通过名称找到类型时,它只处理实现特定接口的类型。
    • 我同意这不是一个写得很好的问题 - 因此,为什么我没有对这个答案投反对票,因为这个问题有点含糊。我对它的理解是你回答@PeterDuniho。
    猜你喜欢
    • 2014-10-13
    • 1970-01-01
    • 2019-03-27
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多