2010-07-29 11 views
5

¿Es posible declarar variables en C#? ¿Si es así, cómo?Desdeclarar variables en C#

+22

Elimina la línea de código que las declara. – Brian

+1

¿Puedes describir tu situación? ¿Por qué crees que necesitas declarar una variable? ¿Estás lidiando con recursos no administrados? ¿Estás creando muchos objetos y conservas sus referencias? ¿Vence cualquier problema de rendimiento? ¿Vienes de C++? – Kobi

+1

¿Puedes definir claramente qué significa para ti la palabra "undeclare"? porque no tengo ni idea de qué significa "no declarado" como verbo. Sé lo que es una "variable local no declarada": una variable local que pretendía declarar, pero que no hizo. Las variables locales no declaradas son un error en C# pero se permiten en algunos idiomas, como VBScript. Simplemente no puedo entender lo que quieres decir con la forma del verbo. ¿Puedes aclarar? –

Respuesta

4

Usted no se ocupa de descifrar en C# (creo que se refiere a la desasignación por cierto, ¿no?) O en otros lenguajes .Net, el recolector de basura se encarga de desasignar la memoria asociada a la variable .

Para los recursos no administrados (fuentes, conexiones de bases de datos, archivos, etc.), debe llamar al método Dispose, ya sea explícitamente o colocando la variable en un bloque using.

Más información sobre el recolector de basura .Net: http://www.csharphelp.com/2006/08/garbage-collection/

1

No lo tiene: cuando una variable se sale del alcance o no hay más referencias, automáticamente se recolecta la basura.

¿Por qué querrías hacer esto explícitamente de todos modos? ¿cuál es el contexto? Lo más probable es que simplemente deba usar un nuevo nombre de variable o refactorizar la sección relevante de código en una nueva función.

10

cerrar el alcance (introducido con '{') que contiene la declaración de variable:

int c=0; 
{ 
int a=1; 
{ 
    int b=2; 
    c=a+b; 
} // this "undeclares" b 
c=c+a; 
} // this "undeclares" a 
+3

Esto no es lo mismo que undeclaring. Tampoco es una práctica recomendada, excepto en circunstancias extrañas. Crea anidamiento arbitrario cuando podría (y debería) simplemente usar un nuevo nombre de variable. – Noldorin

+0

@Noldorin, +1 de mí. Si bien proporcionaría el mismo efecto * casi * como poder declarar una variable, sería una pesadilla en el mantenimiento del código. El deseo de declarar una variable casi siempre indica la necesidad de refactorizar un método en múltiples métodos separados. – Rob

+0

@Rob: De acuerdo.Es un "olor de código" en mi opinión. – Noldorin

0

No creo que hay tal una cosa como undeclaring objects i .Net. Si su objeto utiliza recursos que deben limpiarse, debe implementar la interfaz IDisposable. De lo contrario, el recolector de basura se encargará de todo.

1

Si el objeto es IDisposable, puede usarlos dentro del bloque using. En el resto de los casos, iría con lo que ha mencionado Luther.

using (Car myCar = new Car()) 
{ 
    myCar.Run(); 
} 
+1

Para agregar a esta respuesta, en la mayoría de los casos, cuando el objeto es IDisposable ** debes ** envolverlo en un bloque 'using'. – Kobi

0

No creo que sea posible en los idiomas actuales. Un escenario plausible es la siguiente:

void doSomething(String objectId) { 
    BusinessObject obj = findBusinessObject(objectId); 

    // from this point on the objectId should not be used anymore 
    undef objectId; 

    // continue using obj ... 
} 

Otro escenario es cuando se implementa un método de una interfaz, y quiere asegurarse de que usted no utiliza uno de los parámetros, sobre todo en los métodos de largo.

Object get(int index, Object defaultValue) { 
    undef index, defaultValue; 

    return "constant default value"; 
} 

Esto también serviría como una documentación que el programador pensó en estos parámetros que de otra manera no se utilizarían.