referencia - sintaxis de c#
¿Cuál es la diferencia entre usar una declaración y agregar una referencia? (7)
En Visual Studio, ¿cuándo tiene que agregar una referencia a un dll? Siempre trato de tener un mínimo de referencias en mis proyectos, trato de incluir solo las que son realmente necesarias.
Pensaría que solo necesito una referencia si tengo una declaración de using
en mi fuente. Pero eso no siempre es suficiente.
Por ejemplo, tengo un programa muy simple que using
System y Microsoft.Practices.EnterpriseLibrary.Data:
using System;
using Microsoft.Practices.EnterpriseLibrary.Data;
public class SimpleConnection {
private static void Main() {
var database = DatabaseFactory.CreateDatabase();
var command =
database.GetSqlStringCommand(
"select table_name from information_schema.tables");
using (var reader = database.ExecuteReader(command)) {
while (reader.Read()) {
Console.WriteLine(reader.GetString(0));
}
}
}
}
Creo que solo tengo que hacer referencia a Sistema y Microsoft.Practices.EnterpriseLibrary.Data. Pero eso no es cierto. Si no hago referencia a System.Data, el código no se compilará.
El tipo ''System.Data.Common.DbCommand'' se define en un ensamblado al que no se hace referencia. Debe agregar una referencia al ensamblado ''System.Data, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089''.
¿Cómo puedo saber de antemano cuándo debo agregar una referencia a algo que no estoy using
?
1) Para acceder a un tipo desde un ensamblaje externo, TIENE QUE AGREGARLE UNA REFERENCIA en su proyecto. Esta referencia le dice al compilador qué ensamblajes incluir en su proyecto.
2) La importación del conjunto, sin embargo, es opcional . (en C # esto se hace con la directiva "usar ..."). Esto le dice al compilador dónde buscar para encontrar el tipo usado. Si no se incluye, entonces, siempre que haga referencia al tipo de ese ensamblaje, debe calificar completamente su espacio de nombres junto con su nombre.
EJEMPLO: para usar la clase MessageBox (método Show () ) en un programa de consola, TIENE QUE agregar una referencia al ensamblado System.Windows.Forms y luego hacer referencia a ella como ...
Si no está importando ensamblaje:
System.Windows.Forms.MessageBox.Show ("Hello");
Si importa ensamblaje:
MessageBox.Show ("Hola");
A veces, las referencias que agrega tienen una dependencia de otra biblioteca, por lo tanto, debe tener esa biblioteca en sus referencias.
Agregar una referencia le permite a uno usar cualquier objeto o funcionalidad contenida en esa DLL.
Una vez que agregue una referencia, puede usar esa funcionalidad.
La cláusula de uso ayuda a acortar el código: puede ahorrar al escribir.
Por ejemplo:
utilizando System.IO;
Entonces puedo escribir
Directorio d = [El código va aquí]
Si tuviera la referencia y no tuviera el uso, escribiría
System.IO.Directory d = [El código va aquí]
Pero necesita la referencia para definir la declaración de uso o para usar esa funcionalidad de la DLL.
Ahora, si agrega una referencia a su código y esa referencia necesita otra DLL, entonces cuando compile obtendrá un error sobre la referencia que falta. En tiempo de diseño marcó también. Algunas DLL son independientes (no requieren otras referencias), mientras que otras requieren varias referencias según las características o la funcionalidad que esté utilizando.
Creo que la respuesta en ese caso es que el código está usando un objeto del espacio de nombres System.data. En su ejemplo, el comando var es un DBCommand. Es una referencia a System.Data y no es System o Microsoft.Practices.EnterpriseLibary.Data. Así que parece que ese código también necesita una referencia de comando. ¿Qué devuelve GetSqlStringCommand? Un System.Data.DBCommand. Mira este enlace. [link] http://msdn.microsoft.com/en-us/library/microsoft.practices.enterpriselibrary.data.database.getsqlstringcommand (v = pandp.31) .aspx Por eso necesita la referencia a System.Data .
Debe agregar una referencia a un ensamblaje en el que reside la clase, y cualquier dependencia, que incluya
- tipos de retorno desde otro ensamblado (es decir, un método devuelve un
DbCommand
) - clase base o interfaz de otro conjunto (es decir, una clase deriva de
DbCommand
o implementa una interfaz)
El using
indica a qué espacio de nombres está haciendo referencia directamente . A menudo será necesario que incluya otras referencias a las que se refiera ese ensamblaje.
La única forma es hacer lo que usted hace y corregir los errores a medida que ocurren, o revisar la documentación para ver si eso indica de qué depende el ensamblaje.
No me preocuparía por las referencias no utilizadas. Si no están en uso, entonces no están incluidos.
Las referencias le dicen al compilador dónde buscar tipos para importar. Las declaraciones de uso le dicen al compilador dónde buscar "nombres completos"
Así que puedes escribir cualquiera
using System.Text
StringBuilder sb;
// ...
o
System.Text.StringBuider sb;
// ...
Pero de cualquier manera, debe tener una referencia a System.dll (o es mscorlib para StringBuilder?). Sin la referencia, el compilador no sabe qué tipos están disponibles.