質問: "Bob"; Console.WriteLine(p.Name); } // Outputs "Bob" 太字の部分に疑問があります。なぜわざわざprivateとaccessorを使うのでしょうか。 この場合、単に public string Name; と書くのとは、役割上何が違うのでしょうか?
回答: `public string Name;` のようなクラス変数をフィールドと呼びます。 `public string Name { get; set; }` はプロパティです。 Fields (C# Programming Guide) > > Generally, you should use fields only for variables that have private or protected accessibility. Data that your class exposes to client code should be provided through methods, properties and indexers. By using these constructs for indirect access to internal fields, you can guard against invalid input values. > > > 訳: 一般に private もしくは protected な変数のためにのみフィールドを使用すべきです。あなたのクラスがそれを使用するコードに公開するデータはメソッド、プロパティ、インデクサを通じて提供すべきです。内側のフィールドへの直接のアクセスにこれらを使用することにより、不正な入力をブロックすることができます。 以上に加えて、プロパティを使用することで読み取り・書き込みを提供するかどうか選択できたり、`INotifyPropertyChanged` など様々な機能に対応できたりますので、public であるなら可能な限りプロパティにしてください。