La proprietà Length di System.IO.Stream e di tutte le sue classi derivate non è l'unica proprietà read-only per cui esiste nella stessa classe un metodo setter ma lo sono anche le proprietà In, Out ed Error della classe System.Console:
public sealed class Console
{
//...
private static TextReader _in;
public static TextReader In
{
get
{
//...
}
}
public static void SetIn(TextReader newIn)
{
//...
}
private static TextReader _out;
public static TextReader Out
{
get
{
//...
}
}
public static void SetOut(TextWriter newOut)
{
//...
}
private static TextWriter _error;
public static TextReader Error
{
get
{
//...
}
}
public static void SetError(TextWriter newError)
{
//...
}
//...
}
Ho verificato via reflection che questi sono gli unici casi all'interno del Framework di proprietà read-only pubbliche con setter pubblico nella stessa classe pubblica. Secondo me è interessante questa scelta progettuale.