Я задаю вопрос начального уровня. Хотя я работаю в MVC, но меня действительно смущает простая концепция, а именно «Свойства». Есть много вопросов, которые Я уже прошел через это, но наверняка есть сомнения в уме, и я не смог их прояснить.

Фактически свойства C # используются для получения и установки значения для частных полей.

Подобно

Public class MyClass
{
   private int number;
  public  int Number{
 get{ return this.number;}
 set{ number=Value }
     }
}

class Program
{
    static void Main()
    {
    MyClass example = new MyClass();
    example.Number = 5; // set { }
    Console.WriteLine(example.Number); // get { }
    }
}

Теперь значение присваивается и свойству, и переменной. Верно? Теперь я сомневаюсь: когда мы создаем свойство в модели для структуры MVc, у нас есть только

public int Number{get;set;}

Если это нормально для работы, то почему мы без необходимости создаем еще одно поле спецификатора частного доступа. Если причиной этого является инкапсуляция или скрытие данных, то почему бы не в модели в MVC?

На самом деле, в приведенном выше примере класса я могу использовать только

Console.WriteLine(example.number); 

После объявления этого public?

Тогда какой смысл создавать здесь собственность?

1
Sweetie 21 Апр 2014 в 09:12

2 ответа

Лучший ответ

Свойства можно использовать для хранения и извлечения значений из вспомогательного поля (number в вашем случае) напрямую, как в вашем первом примере. Но методы получения и установки свойств - это обычные блоки кода, которые вы можете использовать по своему усмотрению. Таким образом, вам не нужно назначать резервное поле, но вы можете получить значение свойства также из другого свойства в получателе, например.

public int NumberTimesTwo
{
    get
    {
        return Number * 2;
    }
}

Однако, поскольку обычно требуется, чтобы свойство извлекало и присваивало значение вспомогательному полю, вы можете использовать ярлык:

public int Number { get; set; }

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

private int _number;
public into Number
{
    get
    {
        return _number;
    }
    set
    {
        _number = value;
    }
}

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

2
Markus 21 Апр 2014 в 05:27
private int myVar;

public int MyProperty
{
    get { return myVar; }
    set { myVar = value; }
}

Вы реализуете Encapsulation с помощью MyProperty, который является public для доступа к myVar, который является private и доступен только в том блоке, который определен, то есть ваш класс, а не за его пределами.

Кстати, каким образом этот QA не отвечает на ваш вопрос? Попробуйте пройти через это, чтобы получить дополнительную информацию.

2
Community 23 Май 2017 в 12:14