2009-05-14 6 views
5

に関するJon Skeetの記事を読んでいる間、彼は、フィールドをプロパティに変更することは大きな変更だと言います。フィールドをプロパティに変更することは、どのようなシナリオで大きな変更になりますか?

この変更によってブレークが発生する可能性のある一般的なシナリオを理解したいと思います。このシナリオに加えて、可能であれば詳細を記入してください。

は手始めに、以下の点が他の場所で言及されています:あなたは、クラスにリフレクションを使用している場合は

  • あなたはプロパティにフィールドを変更することはできません。これは私が詳細を持っていなくても明らかです。シリアル化は、オブジェクトを反復処理するためにリフレクションが使用され、フィールドをプロパティに変更するとシリアライザが破損したり、出力が変更されるシナリオの1つです。フィールドと簡単にバインドすることはできません。 (これはなぜですか?私はそれを読むhere

  • ???

EDIT:ロバートはproperties over fieldsを選んだ理由の包括的なリストを持っており、また、それらの間の切り替えは、破断の変化を引き起こすことができる方法を説明します。

答えて

5

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

2

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

9

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

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

1

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

関連する問題