Раньше мы декларировали такие свойства:
public class MyClass
{
private int _age;
public int Age
{
get{ return _age; }
set{ _age = value; }
}
}
Теперь мы можем:
public class MyClass
{
public int Age {get; set;}
}
Мой вопрос: как мне получить доступ к частной переменной, которая создается автоматически с использованием этой нотации?
Я бы предпочел использовать частную переменную, а не общедоступный метод доступа Age. Есть ли запись по умолчанию для доступа к частной переменной, или это просто невозможно?
c#
properties
публичная статика
источник
источник
Ответы:
Цель новых автоматических свойств - уменьшить объем шаблонного кода, который вам нужно написать, когда у вас есть простое свойство, которое не требует специальной логики в получении или наборе.
Если вы хотите получить доступ к закрытому члену, который используют эти свойства, обычно это происходит по нескольким причинам:
Вам нужен только публичный доступ для чтения (т.е. просто «получить»), а класс записывает элемент напрямую - в этом случае вы можете использовать частный набор в своем автоматическом свойстве. т.е.
public class MyClass { public int Age {get; private set;} }
Обычно это покрывает большинство причин, по которым нужно напрямую перейти к вспомогательному полю, используемому автоматическими свойствами.
источник
Использование автоматических свойств подразумевает, что вам не нужна никакая логика получения / настройки для свойства, поэтому частная поддерживающая переменная не нужна.
Не используйте автоматические свойства, если в вашем классе есть сложная логика. Просто используйте
private int _age
обычные геттеры / сеттеры, как обычно.ИМО, автоматические свойства больше подходят для быстрой реализации одноразовых объектов или временных капсул данных, таких как:
public class TempMessage { public int FromID { get; set; } public int ToID { get; set; } public string Message { get; set; } }
Где не нужно много логики.
источник
Этот синтаксис обычно называют «синтаксическим сахаром», что означает, что компилятор берет этот синтаксис и переводит его во что-то другое. В вашем примере компилятор сгенерирует код, который выглядит примерно так:
[CompilerGenerated] private int <Age>k_BackingField; public int Age { [CompilerGenerated] get { return this.<Age>k_BackingField; } [CompilerGenerated] set { this.<Age>k_BackingField = value; }
Даже зная все это, вы, вероятно, могли бы получить доступ к резервному полю напрямую, но такого рода поражение цели использования автоматических свойств. Я говорю, вероятно, здесь, потому что тогда вы зависите от деталей реализации, которые могут измениться в любой момент в будущей версии компилятора C #.
источник
Из C # 3.0 объяснение автоматических свойств
Хотя этот частный член можно использовать напрямую, это очень хакерско и ненужно.
источник
Не стоит, да и вряд ли понадобится. Если вам нужно получить доступ к свойству, просто используйте общедоступное свойство (например, this.Age). Нет ничего особенного в частном поле, поддерживающем общественную собственность, использование его вместо собственности - просто суеверие.
источник
Вы не можете, это языковая функция, а не функция IDE. Честно говоря, я бы предпочел, чтобы IDE добавила для вас частную переменную. Я согласен с тем, что для класса немного странно внутренне использовать публичную точку входа для доступа к своим собственным переменным. Следовательно, я сам не так часто использую эту новую функцию.
источник