Declareing a type as sealed prohibits the use of the types as base type. Declaring a type as abstract, on the other hand, disallow direct instantiation of the type and make it useful only as a base type.
The policy for dealing with collisions when method names or member names are reused is somewhat different. In C#, member names collisions use hide-by-name while method names collisions use hide-by signature.
When the CLR allocate a new object, it calls the constructor method from the most-derived types. For C#, in the face of field declartions with initializer expression, the compiler-generated .ctor will first call all field initializers in order of declartion. Once the derived type’s field initializers have been called, the derived constructor calls the base type constructor, using the programmer-provided parameters if the base constructor was used. Once the base type’s constructor has completed execution, the derived constructor resumes execution at the body of the constructor. This means that when the base type’s constructor executes, the derived type’s constructor body has not even begun to execute.