Perché la direttiva "using" e l'istruzione "using" utilizzano la stessa parola chiave in C #?

10

La direttiva using ci dà accesso ai tipi senza utilizzare i loro nomi completi :

using MyNamespace.Foo.Bar;

L' istruzione using funge da zucchero sintattico per try / finally blocchi che assicurano che gli oggetti siano smaltiti correttamente:

using(var x = new MyDisposableClass()) { ... }

Queste due situazioni sembrano non avere nulla a che fare l'una con l'altra. Perché usano la stessa parola chiave?

Dubito che qualcuno possa mai confondere i due casi, ma sembra strano non creare una nuova parola per una nuova funzionalità.

Per inciso, ho letto anche il doppio uso di class in C ++ (uno per la dichiarazione delle classi, uno per la definizione dei parametri del modello), ma il secondo caso ha ottenuto la propria parola chiave, typename , che ha più senso per me.

    
posta eigenchris 09.12.2016 - 02:45
fonte

2 risposte

7

Hai ragione nel fatto che entrambi gli usi di using non sono correlati.

Tuttavia, ci sono diversi buoni motivi per utilizzare using in entrambi i casi.

  • L'istruzione using è stata creata per .NET 1.0 e ha un senso semantico ("Sto usando questo spazio dei nomi nel seguente codice")
  • In entrambi i casi, using ha un senso semantico. In inglese semplice, sei using uno spazio dei nomi o sei using dell'oggetto monouso dichiarato.
  • Sovraccaricando la parola chiave using , i designer del linguaggio non hanno dovuto creare un'altra parola riservata nella lingua. Ciò aiuta a mantenere pulita la lingua.

È possibile che, dato il loro tempo, i progettisti linguistici abbiano scelto di usare import per le dichiarazioni dei nomi per disambiguare le due scelte ( using un oggetto usa e getta è arrivato in una versione successiva di .NET). Non lo sapremo mai e in realtà non è importante in quanto è estremamente chiaro quale dei due significati stai usando a causa del contesto.

Detto questo, non andare e riciclare il tuo codice con alias di namespace using MyNamespace.DisposableObject = DisposableObject; ovunque.

    
risposta data 09.12.2016 - 03:23
fonte
4

I progettisti di linguaggi generalmente cercano di limitare il numero di parole chiave. Quando una parola chiave è riservata, non può essere utilizzata come identificativo nel codice utente, il che è fastidioso se è solo la parola che ti serve. È anche un ostacolo quando si trasferisce il codice da altre lingue - e Microsoft voleva che le persone portassero il codice da Java a C #. C # ha più parole chiave di Java, ma ogni nuova parola chiave renderebbe più difficile. Inoltre, i linguaggi .net sono progettati per interagire con le API scritte in lingue diverse che potrebbero non avere le stesse parole chiave, il che porta a fastidi se un membro pubblico è anche una parola chiave.

I due usi di using non sono ambigui, poiché appaiono in posizioni nella sintassi, un "utilizzo" è un termine appropriato in entrambi i casi. Quindi ha senso riutilizzare la stessa parola chiave. Noterai altri esempi di riutilizzo di parole chiave, ad esempio:

  • new nei vincoli generici
  • in in foreach e nei parametri del tipo di variante
  • default come clausola in switch e come operatore ( default(T) ).
risposta data 09.12.2016 - 08:47
fonte

Leggi altre domande sui tag