gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:29:52 26 4
gpt4 key购买 nike

我有一个名为 User 的基类。

我有 2 个来自 User 的派生类,分别称为 DerivedUser、OtherDerivedUser

我有以下代码:

 User user = newUser.CreateUserByType();
SendNewUser(user);

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

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

 SendNewUser(user);

我想要**单行代码*。

这个方法根据类型将动态地“知道”要调用哪个方法。

我有 2 个名为 SendNewUser 的函数,它们由派生类型重载。

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

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

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

最佳答案

不,没有办法自动执行此操作。

您有几个选择:

  1. SendNewUser 移动到 DerivedUserOtherDerivedUser 类中。通过这种方式,您可以简单地重载该方法,您只需调用 user.SendNewUser()

  2. 检测类型并调用适当的方法:

    public void SendNewUser(User user)
    {
    if (user is DerivedUser)
    {
    SendNewUserInternal((DerivedUser)user);
    }
    else if (user is OtherDerivedUser)
    {
    SendNewUserInternal((OtherDerivedUser)user);
    }
    else
    {
    throw new InvalidArgumentException("Wrong user type.");
    }
    }

如您所见,该选项很容易出错,并且需要为您引入的每个新派生类工作。如果可以的话,我会坚持使用选项 1。

关于c# - 通过向下转换参数自动重载和调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44675344/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com