Just interesting to know. Why the constructors are protected for those classes.
Because XmlReader/XmlWriter are abstract classes and it doesn't make much sense to have a public constructor in an abstract class. This is a common factory pattern. You use the static
Create method which will return a proper implementation based on the argument types in a way that is completely transparent to the developer.
There are specialized types of XMLReader classes like Dictionary Readers, TextReaders etc. that derive from the abstract XMLReader class. You can instantiate those.