 <p>The <em>technical</em> difference is the presence of <code>get</code> and <code>set</code> accessors. You can customize either or both to do more that just get or set the value.</p> <p>The <em>practical</em> difference is that many data-binding methods (including most if not all of the .NET controls) use reflection to bind to <em>properties</em> only - they do not support binding to <em>fields</em> directly.</p> <p>If you plan to bind the properties of your class to a UI control (<code>DataGrid</code>, <code>TextBox</code>, etc.), or if there's the <em>slightest</em> chance that you might customize the get/set accessors in the future, then make the properties. It is a breaking change to change a field to a property.</p> <p>Many coding standards (<a href="http://msdn.microsoft.com/en-us/library/ms182141.aspx" rel="nofollow">including FxCop</a>) hold that you should use properties instead of fields for public data.</p> <p>If lines of code are a concern you can use auto-implemented properties:</p> <pre><code>class Class2 { public static int A {get; set; } } </code></pre> <p>You can later add logic to the get/set accessors without breaking users of your class.</p>