Как использовать свойства В C#?

Я не уверен, потому что в Java getter/setter выглядят немного по-другому, но что такое "c# way" для кода этого материала?

а.)
    private string name;

    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    private int time;

    public int Time
    {
        get { return time; }
        set { time = value; }
    }

b.)

    private string _name;
    private int _time;

    public string name
    {
        get { return _name; }
        set { _name = value; }
    }

    public int time
    {
        get { return _time; }
        set { _time = value; }
    }

c.)

   public string name {get; set;}
   public int time {get; set;}

Ok есть несколько примеров. Что может выглядеть лучше? Должен ли я сначала написать все объявления частных переменных, а затем Свойства или я должен сгруппировать объявление переменной и свойства рядом друг с другом.

7 ответов


Как насчет d, следуя соглашениям об именах .NET:

public string Name { get; set; }
public int Time { get; set; } // Odd type for time, admittedly...

Не трудитесь писать свойство вручную самостоятельно, если вы не делаете что-то нетривиальное в нем.

Если вы do напишите реализацию свойства вручную, это зависит от вас, как вы называете закрытую переменную. Лично я бы использовал:

private string name;
public string Name
{
    get { /* whatever */ }
    set { /* whatever */ }
}

... но если вы хотите использовать подчеркивания, это ваша прерогатива.

Что касается заказа членов-это еще больше ваш собственный выбор. Предполагая, что вы работаете с командой, поговорите с командой и посмотрите, что такое местная конвенция.


Если вам не нужен доступ к базовым полям поддержки, то авто-свойства-это предлагаемый способ (C). Однако в соответствии с Соглашением об именах .NET они должны быть PascalCase.

public string Name { get; set; }
public int Time { get; set; }

первые два просто convensions именования что вы должны выбрать на основе компании / dev group или вашего собственного решения.

третий случай-это короткий способ декальринга то же свойство, где фактически field будет генерироваться самой средой выполнения.

Короче Плюсы: это коротко и легко.

короче минусов: не могу поставить что-то внутри geter / setter, не может поставить точку останова в Visual Studio...

надеюсь, что это помогает.


в вашем конкретном случае (без логики на геттере или сеттере) лучшим вариантом является C (с небольшим изменением имен свойств, чтобы следовать стандартам C#)

 public string Name {get; set;}
 public int Time {get; set;}

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


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

public string Name {get; set;}
public int Time {get; set;}

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

public string Name {get; protected set;}
protected int Time {get; private set;}

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


public string Name {get; set;}
public int Time {get; set;}