1

クラスの巨大な階層のベースになるはずの抽象クラスがあります。とりわけ、特定の抽象メソッドがあります。実行中、このクラスのすべてのオブジェクトで、このクラスの子ではなく、この抽象クラスについてのみ知っているシステムによって常に呼び出されます。

    foreach( AbstractClass object in allTheObjects )
        object.DoStuff();

ただし、実際には多くの子はこのメソッドをオーバーライドしません (基本クラスでは空です)。それを使用するものと、クラス階層に分散されていないもの。C# はこの空のメソッドを処理しますか、それとも何らかの方法で最適化する必要がありますか?

PS: 時期尚早の最適化が悪であることは知っていますが、それは私にとって本当に興味深いものでした。

4

2 に答える 2

3

私はそれについて心配しません。C# では、メソッド呼び出しは非常に安価です。これを最適化したとしても、違いが見られるとは思えません。参考までに、この投稿を参照してください。

すべてをループするのを避けることができるかどうか、またはデータ構造が何であるかについてもっと心配しますallTheObjects。そこでは、最適化の可能性がはるかに高いと言えます。

また、大きな継承構造が本当に必要なのか、構成やインターフェースで目標を達成できるのかを考えるかもしれません。

詳細については、こちら(インターフェイス メソッド、デリゲート、通常のメソッド呼び出し)も参照してください。

于 2012-10-22T17:38:35.237 に答える
2

ただし、実際には多くの子がこのメソッドを空にします

このメソッドを抽象ではなく仮想として宣言する必要があるのではないでしょうか? したがって、デフォルトの空の実装を提供できます。

于 2012-10-22T17:39:39.067 に答える