1

2 つのメソッドがあり、一方が他方を呼び出すとします。2 番目の方法には、コンパイル時エラーを生成するコードがあります。呼び出されていないのに、コンパイラがまだわざわざ処理するのはなぜですか?

void method1()
{
    var i = 1;
    //method2();
}

void method2()
{
    int i = "2";
}
4

2 に答える 2

10

リフレクションを使用して実行時に他の誰かがそのメソッドを呼び出さないとは限りません。あなたのコードはコンパイルしなければなりません、さもなければ有効なコードではありません - もしそれが一度も使用されていないなら... コメントアウトしてください!

これを拡張するには:

基本的に、コンパイル時に強く型付けされます。.NET は、実行しようとしていることが正当であることを確認するためにすべての型をチェックしますが、null 参照や不適切なキャストなどにより、実行時に例外をスローする可能性があります。

リフレクションは、開発者がアセンブリ メタデータを介してアセンブリ型のプロパティ/フィールド/メソッドなどを検査できるようにする .NET フレームワークのコンポーネントです。

リフレクションにより、これらのタイプの実行時のタイプの検出と検査が可能になり、メソッド/プロパティの呼び出しとフィールドの変更なども可能になります (実行時に新しいジェネリック タイプを作成したり、完全に新しいタイプを作成することもできます)。

つまり、呼び出されないと思われるコードが、ある時点で別の場所で呼び出されないことを保証することはできません。リフレクションを可能にするには、すべてのコードが有効でコンパイル可能である必要があります

そのコードが実行時に成功するかどうかは別の話ですが、例外処理があるのはそのためです。

于 2012-07-25T14:33:20.610 に答える
1

そして、誰かが後でコンパイルしたコードを使用して、それを使用することにした場合はどうなりますか?

プライベートメソッドを使用しても、リフレクションは問題を複雑にする可能性があります。

使用しない場合は紛失してください。(または少なくともコメントアウトする)

于 2012-07-25T14:34:28.667 に答える