下面列出了什么是正式名称。这个例子在c#中,但前提将适用于其他langs。我几乎可以肯定,我在某些其他语言中做过类似这样的事情,但是其中的一个,或者这个概念的名字让我感到遗憾。动态调度(各种)??运行时方法绑定
我试图传达的关键是,在运行时,要执行的方法已确定并调用。这些方法具有几乎相同的签名,只有参数的类型不同,并且参数也都在同一个继承树中。我知道我留下了一些细节,但我想保持简单。
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 { ... }
这不是反模式吗?用户不应该负责提供打印数据吗? –
它只是用于例子的情况。每种方法的有效载荷只是为了提供上下文。 – jasper