Domanda

I parametri predefiniti per i metodi violano l'incapsulamento?

Qual è stata la logica alla base della non fornitura di parametri predefiniti in C #?

È stato utile?

Soluzione

Vorrei questo come " ufficiale " risposta di Microsoft. Tuttavia, i parametri predefiniti (e nominati) saranno sicuramente disponibili in C # 4.0.

Altri suggerimenti

No, non influisce in alcun modo sull'incapsulamento. Semplicemente non è spesso necessario. Spesso, creare un sovraccarico che richiede meno argomenti è una soluzione più flessibile e più pulita, quindi il progettista di C # semplicemente non ha visto un motivo per aggiungere la complessità dei parametri predefiniti al linguaggio.

Aggiunta di " Un altro modo di fare la stessa cosa " è sempre un compromesso. In alcuni casi può essere conveniente. Ma più sintassi rendi legale, più complessa diventa la lingua da imparare e più puoi murare te stesso, prevenendo l'estensione futura. (Forse un giorno avrebbero trovato un'altra estensione del linguaggio, che utilizza una sintassi simile. Quindi sarebbe impossibile aggiungere, perché sarebbe in conflitto con la funzione che avevano aggiunto in precedenza)

Come è stato notato, i parametri predefiniti non erano una funzionalità con priorità, ma è probabile che vengano aggiunti in C # 4.0. Tuttavia, credo che ci siano stati ottimi motivi per non includerlo prima (in 4.0, come ho capito, è soprattutto per supportare duck typing stili di programmazione in cui i parametri predefiniti aumentano la compatibilità dei tipi).

Credo che elenchi di parametri eccessivi (sicuramente più di 4-5 parametri distinti) sia un odore di codice . I parametri predefiniti non sono di per sé cattivi, ma rischiano di incoraggiare un design scadente, ritardando il refactoring in più oggetti.

Alla tua prima domanda: no, è esattamente lo stesso che fornire più costruttori sovraccaricati. Per quanto riguarda il secondo, non potrei dirlo.

I parametri predefiniti saranno inclusi in C # 4.0

Alcuni materiali di lettura al riguardo:

fai clic

fai clic

Sembra anche che l'autore di questo post pubblicherà un articolo nel prossimo futuro sul 'perché' MS sceglie di implementare i parametri di default in C #

Ecco una risposta al motivo per cui non è fornito in C # http://blogs.msdn.com/csharpfaq/archive/ 2004/03/07 / 85556.aspx

Uno svantaggio con l'implementazione dei parametri predefinita in C # 4.0 è che crea una dipendenza dal nome dei parametri. Questo già esisteva in VB, che potrebbe essere uno dei motivi per cui hanno scelto di implementarlo in 4.0.

Un altro svantaggio è che il valore predefinito dipende da come si lancia l'oggetto. Puoi leggerlo qui: http://saftsack.fs.uni-bayreuth.de/~dun3/archives/optional-parameters-conclusion-treat-like-unsafe/216.html .

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