Как изменить переменную из одного класса, используя другой в C# [закрыто]

avatar
dino_monkey
8 августа 2021 в 20:14
85
1
-2

Название может показаться немного запутанным, но я хочу создать класс, объявить общедоступный int со значением по умолчанию 0, затем внутри класса Program I навсегда изменить значение этой переменной в функции, и если я напечатаю это значение с помощью другой функции, оно напечатает значение, установленное в первой функции. Например:

using System;
{

    class Global
    {
       public int variable = 0;
    }

    class Program
    {
        static void Main(string[] args)
        {
            Global test = new Global();
            test.variable = 10;
            //it makes no sense in this code to use another function, 
            //but in my other project it does
            Function();
            Console.ReadLine();
        }
        
        static void Function()
        {
            Global test = new Global();
            //should print 10
            Console.WriteLine(test.variable);
        }
        
    }
    
}
Источник
user12031933
8 августа 2021 в 20:15
0

Просто измените метод на void Function(Global instance) и вызовите его с помощью test.variable = 10; Function(test); и удалите Global test = new Global(); из этого метода.

Fabio
8 августа 2021 в 20:16
0

С вашим текущим образцом сделайте переменную статической public static int variable = 0;

Ňɏssa Pøngjǣrdenlarp
8 августа 2021 в 20:17
1

Вы создаете новый глобальный экземпляр, используя new, что означает, что он снова начинается с zed. Там, где вы объявляете переменную, определяется ее область действия! Рекомендуемое чтение: Область действия переменных в C# также новый оператор (справочник по C#)<99298898512939>>

Caius Jard
8 августа 2021 в 20:23
0

Конечно; вы вызвали эту путаницу для себя, назвав класс Global, хотя на самом деле он вообще не является глобальным

Bryan
11 августа 2021 в 14:24
1

Контекст того, что находится в вашем другом проекте, вероятно, даст лучшее представление о том, чего вы пытаетесь достичь. Не могли бы вы опубликовать это? Пример, который вы привели здесь, не имеет смысла, и я подозреваю, что вы, возможно, задаете неправильный вопрос. Чем лучше контекст, тем лучше ответы.

Ответы (1)

avatar
jallmen
8 августа 2021 в 20:25
1

Вы можете создать статический класс, если не хотите возиться с инъекцией, например:

public static class Global
{
    public int variable = 0;
}
class Program
{
    static void Main(string[] args)
    {
        Global.variable = 10;
    }
    static void Function()
    {
        Console.WriteLine(Global.variable);
    }
}

или вы можете просто внедрить класс в качестве параметра из любого места, где вы его вызываете.

public class Global
{
    public int variable = 0;
}
class Program
{
    static void Main(string[] args)
    {
        var test = new Global();
        test.variable = 10;
    }
    static void Function(Global global)
    {
        Console.WriteLine(global.variable);
    }
}

Если вы хотите навсегда изменить эту переменную внутри каждого класса, вы можете использовать статический класс, но тогда вы не сможете создавать его экземпляры (если вы хотите, чтобы другие переменные были нестатическими.

Я бы порекомендовал изучить IServiceProviders, потому что они могут быть очень полезны, если метод Function() находится внутри другого класса, и вы хотите пройти через глобальный класс.

dino_monkey
8 августа 2021 в 21:00
0

Извините за вопрос, который может показаться вам слишком очевидным, но это потому, что я новичок в программировании. Теперь, как мне вызвать функцию «Функция» в static void Main во втором случае?

jallmen
9 августа 2021 в 21:08
0

Пока они оба статичны, вы можете просто поставить Function(); Если вы добавили параметр, просто добавьте его в скобках.