Ecco il problema illustrato usando un esempio di una classe immutabile. Un libro deve avere almeno uno di un titolo e un codice ISBN.
public class Book
{
private readonly string _title;
private readonly int? _isbn;
public Book(string title)
: this(title, null, true)
{
... throw exception if title is null
}
public Book(int isbn)
: this(null, isbn, true)
{
... throw exception if isbn < 1
}
public Book(string title, int isbn)
: this(title, isbn, true)
{
... throw exception if title is null
... throw exception if isbn < 1
}
private Book(string title, int? isbn, bool privateConstructor = true)
{
_title = title;
_isbn = isbn;
... more work (beyond the scope of this example)
}
... public properties, etc.
}
Vedi che privateConstructor
booleano? Ho dovuto lanciarlo per distinguere tra pubblico Book(string, int)
e privato Book(string, int?)
. Mentre questo è abbastanza innocuo dal momento che il parametro estraneo è in un costruttore privato, il suo uso mi sembra maleodorante. Riordinare i parametri del costruttore privato funzionerebbe ma ciò renderebbe gli inizializzatori del costruttore non intuitivi (nel mio vero lavoro, ci sono più di due soli parametri in gioco). Cos'è un modo migliore?