6

フィールドとプロパティに関する Jon Skeet の記事を読んでいるときに、彼はフィールドをプロパティに変更することは破壊的変更であると述べています。

この変更が中断を引き起こす可能性がある一般的なシナリオを理解したいと思います。シナリオとともに、できれば詳細を教えてください。

手始めに、次の点が他の場所で言及されています。

  • クラスでリフレクションを使用している場合、フィールドをプロパティに変更することはできません。これは、詳細がなくても明らかです。シリアル化は、リフレクションを使用してオブジェクトを反復処理し、フィールドをプロパティに変更するとシリアライザーが壊れるか、出力が変更されるシナリオの 1 つです。

  • フィールドに対して簡単にバインドすることはできません。(これはなぜですか?私はここでそれを読みました)

  • ???

編集: Robert は、フィールドよりもプロパティを選択する理由の包括的なリストを持っており、それらを切り替えると破壊的な変更がどのように発生するかについても説明しています。

4

4 に答える 4

10

パブリックフィールドがあり、それを使用しているコードが別のアセンブリにある場合は、再コンパイルする必要があります。

IOWの定義には、「再コンパイルする必要がある」が含まれます。

于 2009-05-14T13:01:14.060 に答える
5

プロパティは任意の例外をスローできますが、フィールドはスローできません (少なくともコンパイラーがコンパイル時にフィールドの割り当てを認識している場合)。

于 2009-05-14T13:09:32.090 に答える
2

少なくとも Windows フォームでは、フィールドではなく、DataGridViewColumns などをビジネス オブジェクトのプロパティにデータバインドすることしかできません。したがって、クラスがグリッドの DataSource として使用されている場合、そのプロパティがフィールドに変更されると、グリッドの所有者に新しいバグが発生します。

于 2009-05-14T13:00:30.787 に答える
1

refまたはパラメータとしてフィールドを渡すかout、安全でないコンテキストでそのアドレスを取得できますが、プロパティではこれらを行うことはできません。

于 2013-06-25T20:46:46.997 に答える