none
Compartir variables en diferentes metodos RRS feed

  • Pregunta

  • Saludos :)

    Tengo la duda de si se puede compartir una variable de un metodo, en este caso que esta en main, que tiene un valor ya asignado, y que al evaluar esa variable en otro metodo, al regresar obtenga el valor modificado en el metodo main.

    Espero darme a entender, gracias. ^^

    lunes, 25 de marzo de 2019 12:42

Respuestas

  • Eso se llama "alcance" (scope) de la variable. Para que una variable definida en un sitio sea accesible desede otro sitio, tiene que tener el suficiente scope para ser visible desde ambos sitios.

    Si el metodo main y el otro metodo estan en la misma clase, entonces para darle a la variable el suficiente alcance, lo que hay que hacer es definirla a nivel de clase en lugar de dentro de un metodo.


    class MiClase
    {
       private static int miVariable;
    
       public static void Main()
       {
            miVariable = 1;
       }
    
       private static void miOtroMetodo
       {
           int a;
           a = miVariable;
           // ...
       }
    }

    lunes, 25 de marzo de 2019 12:56
    Moderador

Todas las respuestas

  • Eso se llama "alcance" (scope) de la variable. Para que una variable definida en un sitio sea accesible desede otro sitio, tiene que tener el suficiente scope para ser visible desde ambos sitios.

    Si el metodo main y el otro metodo estan en la misma clase, entonces para darle a la variable el suficiente alcance, lo que hay que hacer es definirla a nivel de clase en lugar de dentro de un metodo.


    class MiClase
    {
       private static int miVariable;
    
       public static void Main()
       {
            miVariable = 1;
       }
    
       private static void miOtroMetodo
       {
           int a;
           a = miVariable;
           // ...
       }
    }

    lunes, 25 de marzo de 2019 12:56
    Moderador
  • hola

    podrias pasarle el valor por referencia, algo como esto

    public class Program{
    
        public static void Main(){
    
            int val = 10;
    
            Metodo1(ref val);
    
           Console.WriteLine(val);
    
        }
    
        public static void Metodo1(ref valparam){
    
           valparam = valparam * 2;
    
       }
    
    }


    ref (Referencia de C#)

    Modificador del parámetro out (Referencia de C#)

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 25 de marzo de 2019 12:57
  • Hola

    Si es en la misma clase

    private static int numero;

    pero si es entre clases tienes que generar una clase para instar la variable

     public class Global
        {
            private static Global _datos;
    
            private Global()
            {
            }
    
            public static Global Instance()
            {
                if (_datos == null || _datos.cadena == null)
                {
                    _datos = new Global { cadena = "" };
                }
    
                return _datos;
            }
    
            public string cadena { get; set; }
        }
    y para instar la variable en donde la ocupas
    Global vg = Global.Instance();
    vg.cadena = "123";            
    Console.WriteLine(vg.cadena);
    espero te sirva

    lunes, 25 de marzo de 2019 14:18
  • Gracias, ya me funciona ^^
    lunes, 25 de marzo de 2019 15:20
  • porque vas a usar una variable global ? a nivel de la clase

    la idea es controlar el ambito donde defines la variable, para compartir informacion no es buena idea que algo sea global, porque no controlas quien termina asignando el valor


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 25 de marzo de 2019 15:36
  • porque vas a usar una variable global ? a nivel de la clase

    la idea es controlar el ambito donde defines la variable, para compartir informacion no es buena idea que algo sea global, porque no controlas quien termina asignando el valor


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    Estoy empezando en C# y tengo que crear un juego como proyecto, y se me hace mas facil con una variable global para poder manipular los metodos.

    lunes, 25 de marzo de 2019 18:23
  • >>se me hace mas facil con una variable global para poder manipular los metodos

    mmm, no creo que sea buena idea comenzar a programar generando practicas incorrectas, pero bueno si lo ves correcto es tu codigo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 25 de marzo de 2019 18:37