1. When defining a class, unless it really needs to be inherited by other classes, sealed is used, and the compiler defaults to non-sealed; unless it really needs class calls other than accembly, internal is marked, unless otherwise stated, the compiler defaults to internal.
2. the attribute (field) in the class should be defined as private as much as possible. When it is really necessary to inherit the class call, it should be declared as protected, internal or public for implementation.
3. Methods, properties, and events in the class should be declared as private as much as possible, and public should be used whenever necessary for external calls. Protected and internal are not recommended. Virtual is the least recommended.
4. If a class is too complex, consider splitting it into several classes for implementation.
(From 'clr via C #: chapter6: type and member basics ')
Http://www.free56.cn/post/39.html