Различия между собственностью и полной собственностью - PullRequest
0 голосов
/ 30 апреля 2019

Иногда я вижу, что классы содержат свойства, объявленные так:

public int MyProperty { get; set; }

Другие свойства объявлены так:

private int myVar;

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

Я пришел из фона Java, поэтому я не могуХорошо поймите вторую (полную) декларацию.

Почему у нас должна быть закрытая часть и открытая часть во втором случае?В этом случае мы используем первое объявление, а не второе (или обратное).Можно ли объяснить какие-либо другие различия?

Ответы [ 3 ]

2 голосов
/ 30 апреля 2019

Первый случай на самом деле является краткой формой второго, в котором вы просто используете методы доступа get и set для извлечения и присвоения значения соответственно.

Без добавлениялюбая другая логика

Они называются автоматически реализованными свойствами .

По вашему вопросу о том, почему first int определяется как private?Ну, вот что такое свойства !Они предоставляют механизм для чтения, записи значения private field.

1 голос
/ 30 апреля 2019

В вашем примере они точно такие же. Первое - это просто сокращение для второго.

Так зачем нам использовать второе?

Что если мы хотим подтвердить нашу ценность? Мы могли бы сделать что-то вроде этого:

private int myVar;

public int MyProperty
{
    get { return myVar; }
    set 
    { 
        if(value < 0)
            throw new Exception("Property can't be less than 0!").
        myVar = value; 
    }
}

Другие примеры могут быть, если вам нужно что-то пересчитать, когда установлено MyProperty. Или, может быть, вам нужно вызвать событие, чтобы другие классы знали, что оно было изменено и т. Д.

0 голосов
/ 30 апреля 2019

В c # инкапсуляция - это процесс связывания элементов данных и функций-членов в одно целое. В c # класс представляет собой пример инкапсуляции в реальном времени, потому что он объединит различные типы элементов данных и функций-членов в одну единицу.

Ее пример

документы Microsoft

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

То есть, вы не можете получить доступ к функциям класса или функциям в другом месте программы, например:

public int MyProperty {get; задавать; } Глобален в вашем проекте

private int myVar;

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

У вас есть доступ к MyProperty, а не к myVar

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...