我有一个名为 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){
...
}
最佳答案
不,没有办法自动执行此操作。
您有几个选择:
将
SendNewUser
移动到DerivedUser
和OtherDerivedUser
类中。通过这种方式,您可以简单地重载该方法,您只需调用user.SendNewUser()
。检测类型并调用适当的方法:
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/