通过向下转换参数自动重载和调用函数

Tal*_*sar 5 .net c#

我有一个名为User的基类.

我有两个来自User的派生类,叫做DerivedUser,OtherDerivedUser

我有以下代码:

 User user = newUser.CreateUserByType();
 SendNewUser(user); 
Run Code Online (Sandbox Code Playgroud)

我不想执行if或switch语句,然后对派生类型执行向下转换.

我只想用一行语句执行调用.

 SendNewUser(user);
Run Code Online (Sandbox Code Playgroud)

我想要**带有单线*的干净代码.

根据类型的这种方法将"知道"动态调用哪个方法.

我有两个名为SendNewUser的函数,它们被派生类型重载.

有没有办法通过向下转换到正确的派生类来调用正确的函数(我不想显式转换)

   private static void SendNewUser(DerivedUser user){
       ...
      }

     private static void SendNewUser(OtherDerivedUser user){
       ...
      }
Run Code Online (Sandbox Code Playgroud)

Pan*_*vos 3

是的,使用 C# 7 中的模式匹配:

switch (user)
{
    case DerivedUser u:
        SendNewUser(u);
        break;
    case OtherDerivedUser u:
        SendNewUser(u);
        break;
    default:
        throw new InvalidOperationException("Where did that come from?");
}
Run Code Online (Sandbox Code Playgroud)

您也可以使用模式匹配if,尽管在这种情况下它不会提高可读性:

if (user is DerivedUser u) {
    SendNewUser(u);
}
else if (user is OtherDerivedUser u) {
    SendNewUser(u);
}
else {
    throw new InvalidOperationException("Where did that come from?");
}
Run Code Online (Sandbox Code Playgroud)