2

これまで読んだ記事の中で、多重継承を実装すると複雑さが増すと述べられています。しかし、それが消費者側または言語開発者側の複雑さを増すのだろうか?

たとえば、あいまいさを克服するために、次のようなことを行うことができます。

class Artist{
   public void Draw(){ }
}

class Cowboy {
   public void Draw() { }
}

class Person : Artist, Cowboy{

}

ここでは、2つの同じ署名付きメソッドがあるように見えますが、this.base.Artist.Draw()orthis.base.Cowboy.Draw()やtypeの外側などの構文は、そのインスタンスから、person.base.Cowboy.Draw()このあいまいさを解決するのに十分に見えます。

それで、ここで話している曖昧さと複雑さは何ですか。世の中には非常に多くの製品がありますが、消費者の観点からは、私たちが扱うのはそれほど複雑ではありません。

baseキーワードは多くの場合、あいまいさを防ぐことができます:

  1. person.base.Cowbow.Draw();
  2. (new Person()).base.Cowboy.Draw();
  3. ((Person) someInstance).base.Cowboy.Draw();
  4. this.base.Cowboy.Draw();
4

1 に答える 1

0

基本クラスのメンバーへのすべてのアクセスで、適切な基本クラス名を先頭に追加する必要がある場合、基本クラスから継承するポイントは何ですか? Person クラスの基本クラスの属性を作成するだけで、基本的には同じであると言えます。

考慮すべきもう 1 つの点は、多重継承を使用する場合の仮想テーブルの複雑さです。例として c++ を使用すると、多重継承によって仮想テーブルのサイズと複雑さが増し、ルックアップのパフォーマンスが低下します。

最近、複数の継承を持つ 2 つの異なるクラス (1 つは 8 クラスから継承され、もう 1 つは 6 クラスから継承) を持つプロジェクトを引き継ぎました。「IS-A」関係の代わりに「HAS-A」関係を使用するようにクラスをリファクタリングするだけで、パフォーマンスが 5% 向上しました。確かにこれは極端なケースですが、多重継承の影響を示すのに役立ちます。

于 2012-04-29T10:16:40.807 に答える