A volte i comuni costruttori di classe potrebbero risultare limitativi ai fini della comprensione dell'inizializzazione di istanze complesse. In queti giorni stavo - per puro diletto - rimettendo mano ad alcune mie librerie di Math nelle quali implementavo esempi di calcoli matriciali... disegnare entità matematiche a volte è un buon esercizio di modellazione di oggetti. Le matrici sono fondamentalmente classi che incapsulano array multidimensionali di numeri. Nella fase di unit test è utile istanziare staticamente matrici: come potrebbe essere utile inizializzarle in modo comprensibile alla lettura? Domanda che i più catalogheranno come banale e/o superflua e/o da perditempo :-p
La mia idea era arrivare a poter scrivere qualcosa come questa che segue:
Matrix matrix =
@"
1, 2, 3
2, 3, 4
3, 4, 5
";
Per fare quanto sopra occorre giocare con il casting implicito della stringa. Ecco in che modo:
class Matrix
{
//...
public static Matrix Parse(string s)
{
Matrix matrix;
string text;
StringReader r = new StringReader(s);
while ((text = r.ReadLine()) != null)
{
//Lettura stringa e trasformazione in Matrix.
//L'implementazione del parsing dettagliato e la trasformazione effettiva
//è omesso perchè ininfluente ai fini dell'argomento del post.
}
return matrix;
}
public static implicit operator Matrix(string s)
{
return Parse(s);
}
//...
}