@GennPen

Как использовать переменные по запросу?

Есть следующий код для примера:
static void Main(string[] args)
        {
            Foo(20, gt);

            Console.ReadKey();
        }

private static int gt
        {
            get
            {
                Console.WriteLine("чтение переменной");
                return 100;
            }
        }

static void Foo(int z, int x)
        {
            Console.WriteLine("метод");
            if (z >= 10)
            {
                Console.WriteLine("переменная больше 10");
            }
            else
            {
                Console.WriteLine("переменная = " + x);
            }
        }

На данный момент он выводит следующее:
чтение переменной
метод
переменная больше 10

Оно и понятно, сначала читается переменная для передачи в качестве параметра, даже если она не используется в коде.

Как организовать метод чтобы использовать переменную "по запросу"? Т.е. чтобы она читалась только в момент ее использования, а не передачи параметром методу.
  • Вопрос задан
  • 173 просмотра
Пригласить эксперта
Ответы на вопрос 3
@John_Nash
coder
Что вы понимаете под словом "переменная"? В коде есть статическое свойство и метод. Передача свойства в качестве 2го параметра вызывает метод get.
PS: советую потратить немного времени на чтение основ: поля, свойства, методы, чтобы понимать, чем они отличаются
Ответ написан
Комментировать
@Free_ze
Пишу комментарии в комментарии, а не в ответы
Вы обращаетесь к свойству gt в тот момент, когда передаете его в Foo, где его значение копируется в параметр int x.
Метод Foo не знает, откуда берется значение, ведь оно приходит через формальный параметр. Если же вы будете обращаться к свойству напрямую, то все будет так, как вы ожидаете:

static void Foo(int z/*, int x*/)
{
    Console.WriteLine("метод");
    if (z >= 10)
    {
        Console.WriteLine("переменная больше 10");
    }
    else
    {
        Console.WriteLine("переменная = " + gt);//x);
    }
}
Ответ написан
@GennPen Автор вопроса
На SO посоветовали использовать функции, что более чем подходит для меня:
static void Main(string[] args)
{
    Foo(() => 20, () => gt);
    Console.ReadKey();
}

private static int gt
{
    get
    {
        Console.WriteLine("чтение переменной");
        return 100;
    }
}

static void Foo(Func<int> z, Func<int> x)
{
    Console.WriteLine("метод");
    if (z() >= 10)
    {
        Console.WriteLine("переменная больше 10");
    }
    else
    {
        Console.WriteLine("переменная = " + x());
    }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы