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

Ale*_*der 5 c# reflection casting upcasting

我有几个类,都来自相同的基类型.

class basetype{}
class TypeA : basetype{}
class TypeB : basetype{}
...
Run Code Online (Sandbox Code Playgroud)

其中许多存储在列表中.

List<basetype> myObjects
Run Code Online (Sandbox Code Playgroud)

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

HandleTypes(TypeA obj){}
HandleTypes(TypeB obj){}
HandleTypes(basetype obj)
Run Code Online (Sandbox Code Playgroud)

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

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

现在这是废话.有没有像这样的方式

HandleTypes(obj ?"as derived type"?)
Run Code Online (Sandbox Code Playgroud)

通过MSDN和其他来源搜索,一无所获.

Ber*_*ron 7

怎么样

HandleTypes( obj as dynamic );
Run Code Online (Sandbox Code Playgroud)


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

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

try {
   HandleTypes( obj as dynamic )
}
catch( RuntimeBinderException ex ) {
   // not implemented
}
Run Code Online (Sandbox Code Playgroud)