この質問は C# に最も固有のものですが、C/C++ についても知っておくと興味深いでしょう。Javaは、動的な型キャスト/コンパイル時のジェネリックがないことを考えると、条件を使用する必要があると思います。
パフォーマンス上の理由から、分岐のないロジックが使用される可能性がある場合は、分岐を避けるのが最善です。したがって、重要なセクションでの回避の可能性について知ることは興味深いでしょう。
この質問は C# に最も固有のものですが、C/C++ についても知っておくと興味深いでしょう。Javaは、動的な型キャスト/コンパイル時のジェネリックがないことを考えると、条件を使用する必要があると思います。
パフォーマンス上の理由から、分岐のないロジックが使用される可能性がある場合は、分岐を避けるのが最善です。したがって、重要なセクションでの回避の可能性について知ることは興味深いでしょう。
この質問はC#に最も固有のものです
いいえ、そうではありません。このトピック全体は、C# と CIL の両方の仕様から意図的に除外されています。仕様は、この件に関して何も言うことはありません。
ジャストインタイムコンパイラの実装の詳細について質問しています。
これが解決されたので、CIL を分析してキャストを最適化できる単純なケースと複雑なケースの両方を見つける方法について、Microsoft から何年にもわたって技術記事を読んできたことを付け加えておきます。ただし、Microsoft は、ジッターの実際の実装について話すとき、詳細には触れません。
そのため、オプティマイザーがコンパイルするようにテストをコーディングし、デバッガーを使用しないときに生成されたマシン コードを確認するのが最善の方法です。
ダウンキャストの場合、すべてのレベルで複数の選択肢を持つツリーをたどる必要があるため、答えは確かにイエスです。
アップキャストの場合、型ツリーをたどる反復がどのように行われるかによって異なります。ほとんどの状況では、答えはおそらくイエスですが、ツリー (具体的には、メモリ内のレイアウト) のいくつかの最適化により、ウォークアップがブランチレス操作になる可能性があります。