Uso de la palabra clave "Uso" en la interfaz C #

16

Cuando estoy usando C # para escribir algún código y defino una interfaz usando Visual Studio 2010, siempre incluye una serie de declaraciones "en uso" (como se muestra en el ejemplo)

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

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

Me pregunto para qué sirven y si son realmente necesarios. ¿Puedo dejar esto fuera? ¿Solo son necesarios cuando uso esas partes en la descripción de mi interfaz?

En ningún
fuente
Gracias por la edición. Lo descubrí yo mismo. de alguna manera, las declaraciones de uso se omitieron a pesar de que las había seleccionado en el bloque de código :)
Onno
2
Lea también stackoverflow.com/a/151560/240613 : en su código, los usos están en el lugar incorrecto.
Arseni Mourzenko
1
Gracias por el enlace, es una gran adición. Después de la respuesta de @Akshat Jiwan Sharma, quedó claro que este es realmente el caso, pero al mismo tiempo la pregunta se refiere a la plantilla / configuración predeterminada proporcionada por MS cuando instala VS2010.
Onno
1
@MainMa: aquí es donde Visual Studio coloca las usingsplantillas predeterminadas, por lo que a menos que Microsoft las actualice pronto, esta pregunta es válida.
ChrisF
1
@Midhat: Cierto, pero creo que es evidente lo que se pregunta cuando uno lee la pregunta en sí. Siéntase libre de editar el título si puede pensar en uno mejor.
Onno

Respuestas:

49

Visual Studio no sabe qué código tiene la intención de escribir, por lo que incluye los espacios de nombres más comunes para usted de forma predeterminada en la plantilla de "nueva clase". Esto se hace para que no tenga que resolver todas las referencias para cada línea de código nuevo que escriba.

Una vez que haya escrito su código básico, si hace clic con el botón derecho y selecciona Organizar usos> Eliminar y ordenar , eliminará los que no se utilicen.

ChrisF
fuente
2
Además, si elimina una línea de "uso" por error, puede volver a agregarla yendo al nombre de la clase que ahora no se puede encontrar y haga clic con el botón derecho -> Resolver -> Usando ...
Mr Lister
10
@ MrLister: Si aún no lo sabías, presiona "ctrl +". (período de control) cuando el cursor está en cualquier tipo o clase sin resolver y obtiene el mismo efecto sin tener que tocar el mouse.
Steven Evers
3
También como una adición a la respuesta: los "usos" no utilizados no afectarán el tiempo de ejecución de su código, ya que solo se cargarán los "usos" utilizados. Sin embargo, pueden afectar el IDE y las velocidades de compilación: stackoverflow.com/questions/136278/…
Holger
Como esta es la respuesta aceptada, quería mencionar que StyleCop se quejará de que las referencias están en el lugar equivocado y también se puede editar una plantilla para una nueva clase y una nueva interfaz, etc.
Job
5

Sí, puede eliminar cualquier directiva de uso que no se esté utilizando. Visual Studio agrega automáticamente estas directivas, ya que son las más utilizadas y, por ejemplo, si no va a utilizar linq en la interfaz, puede eliminar la directiva

 System.Linq;

Lo mismo es válido para otras directivas también. También es una buena práctica en mi opinión mover las directivas de uso dentro de los espacios de nombres.

Akshat Jiwan Sharma
fuente
Feliz de ayudar a la pregunta que me hiciste, me desconcertó durante mucho tiempo también. :)
Akshat Jiwan Sharma
Uno puede editar un archivo de plantilla y ajustar el uso de la declaración que se incluye y dónde, deben ir dentro del espacio de nombres de forma predeterminada o StyleCop se quejará, y lo que es peor, pueden suceder cosas malas.
Trabajo
3

Estas usingdeclaraciones predeterminadas son parte de su plantilla predeterminada al crear interfaces. Siempre puede editar la plantilla para que se eliminen. Vea esta pregunta para más detalles.

Bernardo
fuente
¿Pero son realmente necesarios? ¿Hay alguna buena razón para que estén en la plantilla?
Onno
Si no los necesita, simplemente quítelos. Son solo valores predeterminados.
Bernard
Solo son necesarios si uno de sus métodos de interfaz es un tipo de retorno ubicado en uno de ellos. Necesita el Sistema como mínimo, y los demás solo según sea necesario para los tipos que desea devolver.
Graham
En realidad, muchas clases no necesitan sistema. Pero, en general, hace la vida más fácil para la mayoría de los desarrolladores, especialmente aquellos que no están acostumbrados a .NET y que no saben dónde elegir las clases principales del sistema.
Wyatt Barnett
0

En resumen , se llaman espacios de nombres . Los espacios de nombres también se utilizan para hacer referencia a algunas clases de biblioteca dentro de su código. También hay pautas recomendadas sobre cómo usar espacios de nombres en .NET

En la mayoría de los casos, puede simplemente eliminarlos si no los usa. Los siguientes dos espacios de nombres son candidatos potenciales para ser eliminados.

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

Visual Studio se quejará y NO compilará el código, una vez que se hayan usado algunas clases de framework / biblioteca sin declarar sus espacios de nombres. Por lo tanto, el espacio de nombres juega el rol de estructurar su código, así como facilitar las referencias entre las clases de proyecto, interfaces, construcciones, etc.

Yusubov
fuente
-1

usando en C # usado de muchas maneras ... como palabra clave de palabra usando significa usando ... en el inicio cuando usamos el sistema; eso significa que hay una DLL del sistema de nombres en la que se almacenan todas las funciones principales y la usamos para acortar nuestro código ...

system.WriteLine("Andy");

pero cuando usamos el sistema anterior, podemos escribirlo como

WriteLine("Andy");

más adelante en SQLserver cuando usamos el uso de conexión, significa que después de usar los datos de la base de datos mediante el uso de la conexión de comando, se cerrará. es muy útil para un programador que quiere ahorrar tiempo

andysmart001
fuente
1
No intente agregar enlaces innecesarios (y potencialmente spam) a sus respuestas.
ChrisF