Member Field vs Property Suggestion
If a class attribute is used outside the class, always make it either a read-write property or a read-only property. If a class attribute is only used within a class, make it a member field with the appropriate visibility (usually private).
Member Field Visibility Suggestion
Fields should generally be private. Access to fields by external classes should be indirect, usually by means of a property, sometimes by methods, or another means like an indexer. Sometimes it is necessary to make the visibility of a member field protected so descendant classes can use the member field. However, your first choice should be private visibility and you should avoid public member fields (see exception below).
Note: For demonstration purposes, we frequently use public member fields in our documentation, but this is generally not recommended in practice.
The exception is read-only member fields which are supported by some languages. Since read-only member fields are like constants, set when you initialize the member field and cannot be modified, it is acceptable to use public read-only member fields. Read-only member fields mean less code. Less code is cleaner and easier to maintain.
Member Fields, Class Variables, and Instance Variables
The term class variable is frequently interchangeable with member field. However, in some contexts, a class variable might refer to a static member field (no object instance required).
The term instance variable is also frequently interchangeable with member field. However, given a context where one is distinguishing between a static member field and a non-static member field, the term instance variable would refer to the non-static member field.