Occasionalmente, mi trovo di fronte al problema che devo fornire alcuni costruttori per inizializzare oggetti con set di dati diversi. Questi set possono essere trasformati matematicamente l'uno nell'altro, ad esempio:
public Element(int x, int y, int width, int height)
{
setValues(width, height, x, y);
}
public Element(int RectTop, int RectLeft, int RectRight, int RectBottom)
{
setValues(RectRight - RectLeft, Math.Abs(RectBottom - RectTop), RectLeft, -RectTop);
}
Con un tale sovraccarico desiderato, che in realtà non è uno a causa delle stesse firme, è probabile che venga invocato il costruttore errato, ad es. fornisci i valori Rect e viene invocato il primo costruttore. Supponendo, avremmo diversi tipi, potremmo realizzarlo scambiando i tipi con una buona conoscenza che questa è una cattiva pratica. Ma questo non è il caso in questo semplice esempio con quattro volte il tipo int.
Riesci a pensare ad alcune alternative eleganti per ottenere il comportamento desiderato che abbiamo la comodità di sovraccaricare, ma con la stessa firma?