Domanda

In VB.NET, che è meglio usare: sovraccarico della funzione o parametri predefiniti?

È stato utile?

Soluzione

Il codice verrà utilizzato da altre lingue? In tal caso, ciò sposta l'equilibrio verso sovraccarichi, pur tenendo presente la risposta di Hamish. In particolare, C # non supporta parametri opzionali - ancora ...

Certamente questo non impedirebbe a qualcuno di usare il tuo codice da C #, potrebbe essere solo una seccatura per loro.

Se ci sono molti parametri e rappresentano logicamente qualcosa, potresti prendere in considerazione l'incapsulamento insieme, allo stesso modo in cui Process funziona con ProcessStartInfo . È particolarmente bello da C # grazie agli inizializzatori di oggetti.

Se questo è per la costruzione, potresti anche considerare il modello del costruttore come una variante di questo. Ad esempio, in Protocol Buffers posso fare qualcosa del tipo:

Person jon = new Person.Builder { Name="Jon", Age=32,
                                  Spouse="Holly", Kids=3 }.Build();

che finisce per essere molto leggibile mentre si crea una persona in una volta sola (in una espressione e senza dover mutare la persona stessa - in effetti il ??tipo di messaggio è immutabile; è solo il costruttore che non lo è).

Altri suggerimenti

se i parametri sono facoltativi (ovvero i sovraccarichi sono un sottoinsieme dei parametri accettati dalla firma della procedura completa), allora i parametri predefiniti o facoltativi avrebbero più senso.

Se il sovraccarico consente un tipo diverso per il parametro o è un parametro semanticamente diverso che verrà interpretato in modo diverso dalla routine, i sovraccarichi avrebbero più senso.

FYI

Se si desidera aggiungere un parametro a una funzione o metodo chiamato da altri assembly, quindi:

Puoi sovraccaricare creando una funzione aggiuntiva con il parametro extra.

Oppure puoi aggiungere un parametro opzionale, MA: devi ricompilare tutti gli assembly che chiamano questa funzione, anche se non hanno bisogno di usare il nuovo parametro opzionale! Questo di solito non è ciò che la gente si aspetta (specialmente quelli abituati a come funziona VB6). Fondamentalmente, non è possibile inserire un nuovo parametro opzionale in una funzione e aspettarsi che sia totalmente compatibile con le versioni precedenti. Inoltre, a quanto ho capito, se si modifica il valore predefinito, è necessario ricostruire tutti gli assembly di chiamata affinché la modifica funzioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top