自動プロパティは、プロパティに基づいて構築されます。
C#のプロパティは言語機能であり、Javaでは慣例です(getまたはsetで始まるメソッドは、コードについて話す人々によってプロパティと見なされることがよくありますが、コンパイラーにとってはfooまたはbarと同じです)。
.NETとそれに関連する言語は、多くの点でCOMに基づいています(場合によっては次のようになり、場合によっては、何らかの理由またはその他の人気のないCOMで意図的に何かを行わないこともあります)。
COMには、VBでは言語機能に裏打ちされたプロパティの概念があります(C ++では規則に裏打ちされています)。
VBの初期のバージョンは、特に他の場所から提供されたオブジェクトモデルへの基本的なプログラムアクセスを提供するために使用されたコンテキストで、フィールドと取得または設定するメソッドを区別するためにユーザーに提示されるオブジェクトモデルを簡素化することを目的としていました(おそらく追加の作業は、おそらく重要ではありません(.NETでは外部とは重要な点で異なりますが、構文的にプロパティとパブリックフィールドにアクセスすることは同じであると考えてください)。VBとCOM(およびその前のOLE)が成長したとき、それらは一緒に成長しました。
つまり、C#はJavaとC / C ++の継承を共有しますが、Javaが共有しない継承もあるため、プロパティはC#の作成者には良い考えのように見えますが、Javaには良い考えではありません。
編集:最初に私は言った:
個人的には、自動プロパティは、コードを単純化する方法ではなく、プロパティの欠陥に対する回避策であると思います。プロパティは構文的にはパブリックフィールドのように「見えます」が、完全ではありません(を使用DataBinder.Evalしてフィールドを取得してみてください)。プロパティが完全にパブリックであり、getterまたはsetterに追加機能がない場合(自動プロパティの場合)、パブリックフィールドが必要です(カプセル化はここでは議論の余地がなく、完全に公開されています-とにかくそれを渡します)が、フィールドとプロパティの違いはそれに対して機能します。
私はその声明を撤回します。フィールドをプロパティとまったく同じように作成するには、単純なPlain-Old-Data構造体のフィールドがプロパティのように機能する必要があり、パフォーマンスが低下します。概念的には、お互いにもっと似ていてほしいのですが、考えてみると(そして、ここのように「お待たせしました」と何度も悩まされることはなくなりました)、そのままの方がいいです。