Utilizzo della parola chiave "Utilizzo" nell'interfaccia C #


16

Quando sto usando C # per scrivere del codice e definisco un'interfaccia usando Visual Studio 2010, include sempre una serie di istruzioni "using" (come mostrato nell'esempio)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TestEngine.TestNameSpace
{
    interface ITest1
    {
        bool testMethod(int xyz);
    }
} 

Mi chiedo a cosa servono e se sono davvero necessari. Posso lasciarli fuori? Sono necessari solo quando sto usando quelle parti nella descrizione della mia interfaccia?


grazie per la modifica. L'ho appena capito da solo. in qualche modo le istruzioni using sono state escluse anche se le avevo selezionate nel blocco di codice :)
Onno,

2
Leggere anche stackoverflow.com/a/151560/240613 : nel codice, usings sono nel posto sbagliato.
Arseni Mourzenko,

1
Grazie per il link, è un'ottima aggiunta. Dopo la risposta di @Akshat Jiwan Sharma è diventato chiaro che questo è effettivamente il caso, ma allo stesso tempo la domanda riguarda il modello / le impostazioni predefiniti forniti da MS quando si installa VS2010.
Onno,

1
@MainMa: è qui che Visual Studio inserisce i usingsmodelli predefiniti, quindi a meno che Microsoft non li aggiorni presto, questa domanda è valida.
ChrisF

1
@Mathat: vero, ma penso sia evidente cosa viene chiesto quando si legge la domanda stessa. Sentiti libero di modificare il titolo se riesci a pensare a uno migliore.
Onno,

Risposte:


49

Visual Studio non sa quale codice intendi scrivere, quindi include gli spazi dei nomi più comuni per te nel modello "nuova classe". Questo viene fatto in modo da non dover risolvere tutti i riferimenti per ogni singola riga di nuovo codice che scrivi.

Dopo aver scritto il codice di base, se si fa clic con il pulsante destro del mouse e si seleziona Organizza usi> Rimuovi e ordina , verranno eliminati quelli non utilizzati.


2
Inoltre, se si rimuove una riga "utilizzo" per errore, è possibile aggiungerli nuovamente andando al nome della classe che ora non è possibile trovare e fare clic con il pulsante destro del mouse -> Risolvi -> Utilizzo di ...
Mr Lister

10
@MrLister: se non lo sapevi già: premi "ctrl +". (periodo di controllo) quando il cursore si trova su qualsiasi tipo o classe non risolti e si ottiene lo stesso effetto senza mai toccare il mouse.
Steven Evers,

3
Inoltre, come aggiunta alla risposta: gli "utilizzi" non utilizzati non influiranno sul tempo di esecuzione del codice, poiché verranno caricati solo gli "utilizzi" utilizzati. Possono tuttavia influire sull'IDE e sulla velocità di compilazione: stackoverflow.com/questions/136278/…
Holger,

Poiché questa è la risposta accettata, volevo menzionare che StyleCop si lamenterà del fatto che i riferimenti si trovano nel posto sbagliato e che si può anche modificare un modello per una nuova classe e una nuova interfaccia, ecc.
Lavoro

5

Sì, è possibile rimuovere qualsiasi direttiva che non viene utilizzata. Queste direttive vengono automaticamente aggiunte da Visual Studio poiché sono le più utilizzate e, ad esempio, se non si utilizza linq nell'interfaccia, è possibile rimuovere la direttiva

 System.Linq;

Lo stesso vale anche per altre direttive. Inoltre, secondo me è una buona pratica spostare le direttive di utilizzo all'interno degli spazi dei nomi.


Felice di aiutare la domanda che mi hai posto perplesso anche per molto tempo. :)
Akshat Jiwan Sharma,

Si può modificare un file modello e regolare quale istruzione usando venga inclusa e dove - dovrebbero andare all'interno dello spazio dei nomi di default oppure StyleCop si lamenterà, e ancora peggio - possono succedere cose brutte.
Giobbe

3

Queste usingistruzioni predefinite fanno parte del modello predefinito durante la creazione di interfacce. Puoi sempre modificare il modello per rimuoverlo. Vedi questa domanda per maggiori dettagli.


Ma sono davvero necessari? C'è una buona ragione per loro di essere nel modello?
Onno,

Se non ti servono, rimuovili semplicemente. Sono solo valori predefiniti.
Bernard,

Sono necessari solo se uno dei metodi di interfaccia è un tipo restituito situato in uno di essi. È necessario almeno il sistema e gli altri solo se necessario per i tipi che si desidera restituire.
Graham,

In realtà, molte classi non hanno bisogno del sistema. Ma tutto sommato semplifica la vita alla maggior parte degli sviluppatori, in particolare a quelli che non sono orribilmente abituati a .NET e non sanno dove raccogliere le principali classi di sistema.
Wyatt Barnett,

0

In breve , sono chiamati spazi dei nomi . Gli spazi dei nomi vengono utilizzati anche per fare riferimento ad alcune classi di librerie all'interno del codice. Esistono anche linee guida consigliate su come utilizzare gli spazi dei nomi in .NET

Nella maggior parte dei casi, è possibile rimuoverli semplicemente se non utilizzati. I seguenti due spazi dei nomi sono potenziali candidati da rimuovere.

using System.Collections.Generic;
using System.Linq;

Visual Studio si lamenterà e NON compilerà il codice, una volta che alcune classi di framework / libreria sono state utilizzate senza dichiarare i loro spazi dei nomi. Pertanto, lo spazio dei nomi gioca a rotazione per strutturare il codice e facilitare i riferimenti tra le classi del progetto, le interfacce, i costrutti, ecc.


-1

usando in C # usato per molti modi .. come parola chiave usando significa usando .. all'avvio quando usavamo il sistema; ciò significa che esiste una DLL di nome System in cui sono memorizzate tutte le funzioni principali e la usiamo per abbreviare il nostro codice ...

system.WriteLine("Andy");

ma quando usiamo il sistema sopra, allora possiamo scriverlo come

WriteLine("Andy");

più in SQLserver quando usiamo usando la connessione significa che dopo che usiamo i dati dal database usando la connessione di comando si chiuderà. è molto utile per un programmatore che vuole risparmiare tempo


1
Non cercare di aggiungere collegamenti non necessari (e potenzialmente spam) alle tue risposte.
ChrisF
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.