none
Limpiar una variable (cant) dentro de un método DataReceivedHandler. RRS feed

  • Pregunta

  • La idea es borrar variable que este dentro de otro método

    Ejemplo:

    public class Program
    {
            private int cant; // declare la variable
    
            static void Main(string[]args)// punto de entrada de una aplicación
            {
                Program Borrar = new Program {};//llamo la variable de la clase Program
                 Borrar.cant = 5; //asigno un número a la variable cant
    // Detecta cualquier dato recibido.
                Puerto_serie.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
    
            {
    
            private static void DataReceivedHandler( object sender, SerialDataReceivedEventArgs e) // Representa el método que manejará el evento DataReceived de un objeto SerialPort.
                {
                Program Borrar = new Program {};//)//llamo la variable de la clase Program
                Borrar.cant = 0; //asigno un número a la variable cant 0
                }
    }
    


    miércoles, 9 de diciembre de 2020 16:34

Respuestas

  • Primera observación: tomando literalmente lo que dices en la pregunta, no es posible. El lenguaje está expresamente diseñado para que desde fuera de un método no se pueda cambiar una variable interna de ese método.

    Así que no tienes más remedio que poner la variable fuera del método si es que quieres cambiarla desde otro método diferente.

    Pero si eso era lo que pretendías hacer en el código que has mostrado, no está bien hecho. Los dos métodos acceden a varables distintas, aunque tengan el mismo nombre (Borrar.cant). La razón es que cada vez que llamas a new Program se crea una nueva instancia de la clase Program, y cada una de esas instancias contiene una copia diferente de todas las variables que hay dentro de la clase. Así que cada new Program contiene un cant diferente. Al modificar uno no se modifica el otro.

    Una solución sencilla es usar una variable static:

    private static int cant;

    De esta manera puedes llamar directamente a cant desde los dos métodos (que son ambos static), sin necesidad de hacer new Program en ningún momento.

    • Marcado como respuesta EricRRModerator jueves, 31 de diciembre de 2020 17:00
    miércoles, 9 de diciembre de 2020 17:57
    Moderador

Todas las respuestas

  • Primera observación: tomando literalmente lo que dices en la pregunta, no es posible. El lenguaje está expresamente diseñado para que desde fuera de un método no se pueda cambiar una variable interna de ese método.

    Así que no tienes más remedio que poner la variable fuera del método si es que quieres cambiarla desde otro método diferente.

    Pero si eso era lo que pretendías hacer en el código que has mostrado, no está bien hecho. Los dos métodos acceden a varables distintas, aunque tengan el mismo nombre (Borrar.cant). La razón es que cada vez que llamas a new Program se crea una nueva instancia de la clase Program, y cada una de esas instancias contiene una copia diferente de todas las variables que hay dentro de la clase. Así que cada new Program contiene un cant diferente. Al modificar uno no se modifica el otro.

    Una solución sencilla es usar una variable static:

    private static int cant;

    De esta manera puedes llamar directamente a cant desde los dos métodos (que son ambos static), sin necesidad de hacer new Program en ningún momento.

    • Marcado como respuesta EricRRModerator jueves, 31 de diciembre de 2020 17:00
    miércoles, 9 de diciembre de 2020 17:57
    Moderador
  • Si quieres borrar la variable.

    Tan solo

    cant = "" ;

    O así:

    cant = null;

    Tutorial Puerto serie C#.

    https://social.msdn.microsoft.com5/Forums/es-ES/84f23b72-0e40-4f1c-9d89-07d1d56e3e66/tutorial-arduino-consola-y-puerto-serie?forum=devcommes


    http://electronica-pic.blogspot.com

    jueves, 10 de diciembre de 2020 12:14
  • Tan solo

    cant = "" ;

    No, en este caso concreto no se puede.

    Se trata de una variable de instancia. Pero los métodos son estáticos. Un método estático no puede acceder a una variable de instancia.

    Desde luego, una posible solución es cambiar la variable para que sea estática, que es una de las cosas que yo sugería.

    jueves, 10 de diciembre de 2020 13:48
    Moderador
  • OK. Entendido..

    http://electronica-pic.blogspot.com

    jueves, 10 de diciembre de 2020 14:06
  • Hola,

    ¿Alguna novedad sobre la consulta realizada? ¿Han sido útiles las respuestas proporcionadas?

    Espero su respuesta.

    Gracias por usar los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    viernes, 11 de diciembre de 2020 19:58
    Moderador