A few thoughts:
1. You refer to a 'private abstract class' - are we talking about nested classes here? If not, I'm not sure what you mean by a private class. Can you explain?
2. Private members of a class can only ever be accessed from within that class. To access them within sub-classes (derived classes) declare them as protected. If you declare members as public, but declare the class as internal, you can only access them from other classes in the same assembly - and sub-classes can only be declared within the same assembly. Or make the class public and members protected internal - sub-classes can then be declared in other assemblies, but protected internal members can only be accessed by sub-classes within the same assembly. See
http://msdn.microsoft.com/en-us/library/ms173121(v=vs.80).aspx[
^] for further details.
3. Note also that sub-classes can't have greater accessibility than base classes (so can't have public sub-class of an internal class). Similarly for virtual / abstract members - e.g. override can't be public if base is protected.
4. All 'get' properties (without a corresponding 'set') are read only by definition - though your get code could of course have internal side effects that alter the object's state. If you need both read-only and read-write behaviour with different accessibility, consider having two separate properties.
Hopefully that makes some sense and helps a bit (and that I haven't got things too tangled).