运行时方法绑定

本文关键字:绑定 方法 运行时 | 更新日期: 2023-09-27 18:11:42

我在下面概述的东西有一个正式的名称吗?这个例子是用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 { ... }

运行时方法绑定

是动态调度。我把它称为动态绑定,因为它是许多OO语言(如Java)提供的函数绑定特性,默认情况下实现了它,而c++则要求在显式关键字"virtual"中以动态方式工作——默认情况下c++是静态绑定。然而,在现代的OO中,动态绑定很容易通过多态和重载实现。所以你可以这样写:

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#了解不多,而且它有很多特性。我发现这篇文章有一些例子给你- http://www.codeproject.com/KB/cs/dynamicbindingincsharp.aspx