Как определить свойства - PullRequest
4 голосов
/ 11 октября 2010

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

private int someVar;
public int SomeVar
        {
            get { return someVar; }
            set { someVar= value; }
        }

, в то время как некоторые разработчики используют это:

public int SomeVar
        {
            get;
            set;
        }

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

Ответы [ 7 ]

5 голосов
/ 11 октября 2010

Если вы не собираетесь выполнять какую-либо проверку или что-либо еще при доступе или изменении свойства, используйте свойство auto (ваш второй пример).Если вам нужно проверить ваш установщик или вызвать метод, когда кто-то получает или устанавливает значение, или что-то в этом роде, используйте ваш первый пример.Автоматическое свойство просто не позволяет вам иметь и свойство, и вспомогательное поле, если вам не нужны оба.

1 голос
/ 11 октября 2010

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

public int SomeVar
    {
        get;
        private set;
    }
1 голос
/ 11 октября 2010

Это зависит ...

Если все, что вы делаете, это устанавливаете и считывает значение поля, то второй метод предпочтительнее, так как он считается более читабельным.Этот механизм был введен в C # 3.0.

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

1 голос
/ 11 октября 2010

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

1 голос
/ 11 октября 2010

Более поздняя версия более читабельна. И избегает промахов "someVar" или "SomeVar"

0 голосов
/ 11 октября 2010

Метод 1

private int someVar;
public int SomeVar
    {
        get { return someVar; }
        set { someVar= value; }
    }

Этот метод обычно не является предпочтительным, поскольку некоторые языки (например, VB.NET) не чувствительны к регистру . Поэтому someVar, SomeVar, SOMEVAR и somevar, а также все возможные комбинации прописных и строчных букв, которые вы можете считать для компилятора, могут означать одно и то же, и это может привести к ошибкам.


Метод 2

public int SomeVar{get; set;}

Этот метод, называемый автоматической реализацией свойства, создает закрытую переменную в тенях для хранения и извлечения данных, переданных свойству.

В VB.NET имя переменной, созданной для каждого автоматически реализуемого свойства, совпадает со свойством, начинающимся с подчеркивания (_). Таким образом, свойство с именем SomeProperty будет иметь соответствующую приватную переменную с именем _SomeProperty.

Это можно продемонстрировать в коде VB.NET, создав любое автоматически реализуемое свойство, а затем создав переменную с тем же именем, что и у автоматически реализуемого свойства с префиксом подчеркивания.

Однако в C #, если у вас есть автоматически реализованное свойство, для свойства используется переменная, украшенная атрибутом CompilerGenerated. Таким образом, вы можете иметь автоматически реализованное свойство и переменную с тем же именем, что и у свойства, но в другом регистре (, как в методе 1 ).


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

private int _SomeVar;
public int SomeVar
{
    get { return _SomeVar;}
    set { _SomeVar = value > 0 ? value : 0; }
}
0 голосов
/ 11 октября 2010

Основной и лучший способ определения свойства выглядит следующим образом

private int _student_rollnumber;
private string _student_name;
public int Student_RollNumber
{
 get { return _student_rollnumber; }
 set { _student_rollnumber = value; }
}
public string Student_Name
{
 get { return _student_name; }
 set { _student_name = value; }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...