2010-09-03 3 views
3

Учитывая приведенный ниже код, будет ли у параметра метода y в Bar (int y) присвоено значение от x или 1? Я понимаю, что они логически эквивалентны, но я хочу понять операцию назначения.Назначение параметров метода в C#

class Program 
{ 
    static void Main(string[] args) 
    { 
     var foo = new Foo(); 
     var x = 0; 
     foo.Bar(x = 1); 
    } 
} 

public class Foo 
{ 
    public void Bar(int y) 
    { 
    } 
} 

ответ

6

Параметр получает значение задания.

Рассмотрим такой код:

int x = 0; 
int y = (x = 1); 
x = 42; 
foo.Bar(y); 

Eventhough x изменяется в другой раз, y все еще содержит 1.

+0

Все хорошие ответы, но я нашел это самым ясным и кратким. Отмечено как ответ. –

4

Он назначен на результат x=1 который равен 1.

3

Результат оператора присваивания будет передан Bar, который «является значением, которое было назначено на левой стороне» (от Eric Lippert's blog).

В этом случае это значение int1.

0

Все, что внутри() будет передано в y, если оно есть int.

Но я думаю, что непосредственно ответить на вопрос, x - это то, что фактически передается, а не 1, x равно 1, а затем y = x = 1.

+1

Результат передачи передается, а не значение 'x'. – bdukes

1

Вы должны рассмотреть порядок оценки. Перед вызовом функции любое выражение в фигурных скобках необходимо оценить. Результат затем используется в качестве аргумента в вызове функции.

В вашем случае x = 1 является выражением. Он должен быть оценен с присвоением сначала (x=1), тогда вы можете использовать полученное значение, которое является x, и использовать его в качестве аргумента для bar.

Это эквивалентно

x = 1 
foo.bar(x) 

Вы можете видеть, что это будет оценено, если вы посмотрите на значение x после вызова foo.

Смежные вопросы