Per semplice concatenamento costruttore, è possibile utilizzare le parole chiave speciali this
o base
per riferirsi ad altri costruttori della classe corrente o genitore. È consentito utilizzare qualsiasi parametro per il costruttore di esecuzione come parametri per il costruttore concatenato e è possibile combinarli utilizzando qualsiasi espressione legale singola. Si tratta fondamentalmente delle stesse regole che si applicano a qualsiasi altra espressione inline fornita a una chiamata di funzione, eccetto che si dovrebbe evitare di utilizzare qualsiasi membro della classe (poiché non è ancora stato costruito) e limitarsi alle costanti e ai parametri pass-through:
public foo (Uri someUrl)
{
this.url = someUrl;
}
public foo (string path, string query)
: this(new Uri(String.Concat(path, query)))
{
// this.url is now set and available.
}
Ciò funzionerà finché l'elaborazione che è necessario eseguire può essere eseguita in un'unica espressione di valore. Se, ad esempio, avessi avuto bisogno di fare qualcos'altro con lo Uri
prima di essere inviato all'altro costruttore, o se avessi bisogno di qualche complessa logica if/then, non saresti in grado di farla franca con questa tecnica. L'alternativa è quella di refactoring del codice in un metodo di inizializzazione:
public foo (Uri someUrl)
{
this.init(someUrl);
}
public foo (string path, string query)
{
var url = String.Concat(path, query);
url = url.Replace("http://", "https://");
this.init(url);
}
private void init (Uri someUrl)
{
this.url = someUrl;
}
fonte
2013-06-24 03:38:59
Votazione per riapertura. La risposta nel post duplicato è corretta ma è più orientata al parametro "semplice" che passa al costruttore successivo. Il post di OP suggerisce che ci sia dell'elaborazione da fare all'URI prima di trasmetterla. Una risposta più adatta sarebbe quella di avere un metodo comune che entrambi i costruttori chiamano e passano i parametri per riferimento. – keyboardP
@keyboardP, d'accordo con te. Ho modificato il titolo per riflettere quello più precisamente e ho votato per riaprire. (anche cercato duplicati di questa sfumatura, e venne fuori vuoto) –
Grazie per la riapertura. –