c# - 在 C# 中向上转换并根据派生类型调用特定方法

标签 c# reflection casting upcasting

我有几个类,它们都派生自相同的基类型。

class basetype{}
class TypeA : basetype{}
class TypeB : basetype{}
...

其中一些存储在列表中。

List<basetype> myObjects

与往常一样,这些类型中的每一种都必须以不同的方式处理。现在我有几种方法来处理它们,一种方法将基类型作为参数。

HandleTypes(TypeA obj){}
HandleTypes(TypeB obj){}
HandleTypes(basetype obj)

目前,我的 HandleAllTypes 看起来像这样:

string name = obj.GetType().Name
switch(name)
{
  case "TypeA":
    return HandleTypes(obj as TypeA);
  case "TypeB":
    return HandleTypes(obj as TypeB);
  ....
}

现在这是废话。有没有办法像

HandleTypes(obj ?"as derived type"?)

通过 MSDN 和其他来源进行搜索,一无所获。

最佳答案

怎么样

HandleTypes( obj as dynamic );

?


当我不得不处理第三方类时,我已经使用过几次。当有很多派生类时,它也会非常有用。

您可以轻松检查处理功能是否已实现:

try {
   HandleTypes( obj as dynamic )
}
catch( RuntimeBinderException ex ) {
   // not implemented
}

关于c# - 在 C# 中向上转换并根据派生类型调用特定方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6844508/

相关文章:

c# - 从 NameValueCollection 设置类的属性

c++ - 如何为typedef定义隐式转换?

将指针转换为 intptr_t 并返回

Java - 从反射调用的构造函数中捕获异常

c - 在 Linux 上用 gcc 编译的 C 代码执行转换的是什么?

c# - 在 MVC 4 和 Backbone.js 中传递查询字符串中的对象

c# - Windows Phone根据我的纬度和经度获取附近6公里以内的经纬度

c# - C# 中的文件系统观察程序仅被触发一次

c# - 验证数据库中是否存在? (MySql 和 ASP.NET)

c# - Reflection.Emit 泛型基类泛型方法调用