2013-08-24 3 views

ответ

0

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

int x = 0; 

public int X 
{ 
    get 
    { 
     return x; 
    } 
    set 
    { 
     if (value < 0) // A guard condition or some custom condition here 
      value = 0; 

     x = value; 
    } 
} 

Для более ясного ответа вы можете сделать

private double seconds; 

public double Hours 
{ 
    get { return seconds/3600; } 
    set { seconds = value * 3600; } 
} 
+0

то в чем разница между простой переменной и вторым фрагментом. –

+0

То, что вы сделали вначале, автоматически выполняется компилятором во втором. Однако, если вы хотите контролировать значение локальной переменной и свойства, когда значение установлено и извлечено, вы можете использовать фрагмент, как я писал в своем ответе. –

2

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

Auto-Implemented Properties (C# Programming Guide)

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

0

Если вместо этого спросил,

«В чем разница между этими двумя кодовыми сниппеты (а не только между этими двумя свойствами)?»

вы могли догадаться ответ сами: В первом фрагменте кода, вам нужно сделать еще одну вещь: Вы должны явно объявить поле подкладочный для вашего имущества, x. Во втором фрагменте кода вам не нужно это делать, потому что компилятор делает это за вас.

два фрагмента кода, таким образом, функционально идентичны, за исключением того, , что в первом фрагменте кода, у вас есть способ прямого доступа поле подпирают собственности (x). Во втором фрагменте нет способа сделать это, потому что фоновое поле неназванное/анонимное.

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