=str #16479 Make constructor of FreeDirective internal

you're right about the sealed being effectively what we need, sorry for the confusion on that one :) 
yes, the `private` would be good though