Un metodo Start() (come Run() , Execute() o qualcosa di simile) è appropriato quando il costo della costruzione dell'oggetto è basso, ma il costo di usando è alto. Ad esempio: una classe che incapsula un algoritmo di ottimizzazione del percorso migliore. È banale impostarlo con un set di parametri ( X quadrati di Y quadrati, con il metodo di valutazione di suchandsuch), ma potrebbe richiedere del tempo per essere eseguito. Se vuoi creare 20 di questi oggetti, potresti voler ritardare l'esecuzione fino a quando non sono stati creati tutti - questo ti permette di parallelizzarli più facilmente, per esempio.
In alternativa, potrebbe essere utile quando non sai quando l'oggetto sarà necessario per iniziare, forse perché si basa sull'input dell'utente, o sulla logica che seleziona da un elenco di possibilità.
Ciò presuppone, ovviamente, che Start() sia il metodo utile sull'oggetto e non equivalente a un metodo Initialize() . Se è solo un modo extra per impostare più parametri, non dovrebbe esistere.