0

以下に概説したものの正式な名前はありますか。例は 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 { ... }
4

1 に答える 1

1

ダイナミック発送です。これは、Java などの多くの OO 言語によって提供される関数バインディング機能であるため、動的バインディングとして学習します。これは、デフォルトで実装され、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

于 2011-10-19T11:49:25.470 に答える