我在下面列出的内容是否有正式名称。示例在c#中,但前提适用于其他语言。我几乎可以肯定我几年前在其他一些语言中做过类似的事情,但是这个或者概念的名字逃脱了我。动态调度(各种)??
我试图传达的关键点是,在运行时,确定并调用执行方法。这些方法几乎具有相同的签名,只是参数的类型不同,并且参数也都在同一个继承树中。我知道我遗漏了一些细节,但我想让这个例子保持简单。
string result;
User u;
User user = new User();
Manager manager = new Manager();
u = user;
result = _Print(u);
Console.WriteLine(result); // user...
u = manager;
result = _Print(u);
Console.WriteLine(result); // manager...
// interested in part
private static string _Print(User u)
{
return (u is Manager) ? Print((Manager)u) : Print(u);
}
// plumbing
private static string Print(User u)
{
return "User...";
}
private static string Print(Manager m)
{
return "Manager...";
}
class User { ... }
class Manager : User { ... }
答案 0 :(得分:1)
是dynamic dispatch。我将它理解为动态绑定,因为它是许多OO语言提供的函数绑定功能,例如Java,默认情况下实现它,以及C ++,它在显式关键字“virtual”中需要它才能在{ {3}} - 默认情况下,c ++是静态绑定。但是,在OO中,现代动态绑定很容易通过dynamic fashion和Polimorphism实现。所以你可以这样:
User u = new User();
Console.WriteLine(u.print()); // user...
u = new Manager();
Console.WriteLine(u.print()); // manager...
class User { ...
public string print(User u)
{
return "User...";
}
... }
class Manager : User { ...
public string print(Manager m)
{
return "Manager...";
}
... }
但你需要适应你的语言。我对C#了解不多,而且有很多特质。我发现这篇文章有一些例子 - Overloading