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
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);
}
}
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());
}
}