This isn't just a design principle for .NET libraries, it's a SOLID design principle. All classes should be inextensible unless they are explicitly designed to be extended.
The open/closed principle doesn’t say that. It says classes should be “open for extension” (usually meaning you are able to inherit from them and add functionality) and “closed for modification”, meaning you aren’t able to change internal implementations.
It does not say “everything should be closed by default unless explicitly marked otherwise”...
Composition is still an option, and arguably the default option. Sealing a class does not prevent anyone from extending the functionalities offered by a class.
It does not say “everything should be closed by default unless explicitly marked otherwise”...