2013-04-16 4 views
2

Кто-то сказал мне, что вы могли бы заменить следующий код:Самый короткий способ написания свойства C#?

private string name; 

public string Name 
{ 
    get; 
    set; 
} 

следующие и не страдать каких-либо негативных последствий:

public string Name; 

Я понимаю, что свойство, установить, как в первом примере, делает довольно почти так же, как если бы я удалил его и установил исходный атрибут public, но неудобно ли ему программировать, чтобы перейти со вторым способом для атрибутов, для которых вам нужен только базовый getter и setter?

+1

Ваш первый пример создаст два несвязанных члена: 'name' и' Name'. «Имя» - это авто-свойство; он не будет использовать поле «имя», которое вы написали, но «невидимое» поле с каким-то сумасшедшим именем, которое вы не можете использовать напрямую. Если вы хотите использовать свою собственную переменную, укажите тела аксессуаров, как в 'public string Name {get {return name; } set {name = value; }} '. –

ответ

0

Я думаю, что самый короткий путь заключается в использовании Auto-Implemented Properties и некоторые ссылки информации о них

В C# 3.0 и более позднее, авто Реализуемого свойства делает свойство декларирования более кратким, когда никакой дополнительная логика не требуется аксессорах собственности , Они также позволяют клиентскому коду создавать объекты. Когда вы объявляете свойство, как показано в следующем примере, компилятор создает частное, анонимное фоновое поле, доступ к которому можно получить только через get и set accessors свойства.

общественная строка Имя {get; set;}

0

Самый короткий способ написания недвижимости - автоматический приемник и сеттер.

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

Автоматический геттер/сеттер выглядит следующим образом:

public string Blah { get; set; }

Эта функция была введена в C# 3, я считаю. Поэтому вам нужно настроить таргетинг на это или выше, чтобы использовать их.

4

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

Имейте в виду, код public string Foo { get; set; }

фактически эквивалентно

private string foo; 
public string Foo 
{ 
    get { return foo; } 
    set { foo = value; } 
} 
+1

Также 'private string name;' в вашем первом примере немного бессмысленно. – Liam

0
public string Name { get; set; } 

MSDN:

Свойство является элементом, который обеспечивает гибкий механизм для чтения , написать или вычислить значение частного поля. Свойства можно использовать так, как если бы они были публичными элементами данных, но на самом деле это специальные методы, называемые accessors. Это позволяет легко получать доступ к данным и все еще помогает повысить безопасность и гибкость методов.

3

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

private string name; 

public string Name 
{ 
    get; 
    set; 
} 

неправильно оно должно быть либо

public string Name 
{ 
    get; 
    set; 
} 

или

private string name; 

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

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

public string Name 
{ 
    get; 
    private set; 
} 

Свойства сочетать аспекты обоих lds и методы. Для пользователя объекта свойство представляется как поле, для доступа к свойству требуется точно такой же синтаксис. Для реализации класса класс является одним или двумя кодовыми блоками, представляющими get accessor и/или набор доступа. Блок кода для get accessor выполняется при чтении свойства; блок кода для аксессуара установки выполняется, когда ему присваивается новое значение. Свойство без установленного аксессуара считается доступным только для чтения. Свойство без аксессора доступа считается только для записи. Свойство с обоими аксессуарами - чтение и запись.

Источник: http://msdn.microsoft.com/en-us/library/w86s7x04(v=vs.80).aspx

0

общественная собственность не то же самое, как переменная общественного экземпляра.

И эта разница может иметь значение. Например, если вы используете элементы управления asp.net типа databound, такие как DataTextField из DroDownListBox, он не будет работать, если вы установите его вместо переменной экземпляра вместо общедоступного.

Смежные вопросы