2016-12-11 2 views
0

Может ли кто-нибудь сказать мне, что такое использование публичного имущества для частного члена класса, но не реализующее ничего в комплекте и не получившее его? Я знаю, что это может быть просто для примера, и что в дальнейшем вы можете реализовать что-то, но я не знаю, есть ли смысл использовать его как тоНазначение недвижимости с пустым набором get

+0

Это может быть автоматически реализованная недвижимость. Зависит от того, что вы подразумеваете под пустым и является ли это VB или C# – Plutonix

+0

Вы имеете в виду авто свойства? т. е. public int Foo {get; set;} –

+0

@MichalHainc Я не верю, что это дубликат этого вопроса. Внимательно прочитайте его вопрос и посмотрите мой ответ. – CodingYoshi

ответ

2

Я предполагаю, что вы знаете, что есть частное поле, сгенерированное компилятором C# в качестве поля, поддерживающего это свойство. Это синтаксический сахар. Я также предполагаю, что вы знаете, что это свойство, реализованное автоматически. Итак, какова точка собственности, если она общедоступна без логики в get или set. Другими словами, любой класс может получить к нему доступ и установить его значение. Итак, зачем выбирать это свойство в публичном поле?

Цель этого является:

  1. Сегодня get и set пуст, но это, возможно, потребуется код в будущем. Чтобы избежать нарушения контракта в будущем, вы используете пустые get и set.
  2. Большинство привязок данных .NET можно выполнять против свойств, но не для полей. Поэтому, хотя он пуст, он по-прежнему служит гораздо большей цели.
  3. get и set могут иметь модификаторы доступа. Например, вы можете сказать, что set является закрытым, но get является общедоступным.
  4. Поле не может использоваться в интерфейсах, но свойства могут.
+0

это именно то, что я искал, спасибо вы! – wookiee

1

Когда вы видите

public int Count { get; set; } 

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

private int _count; 

public int get__Count() 
{ 
    return _count; 
} 

public void set__Count(int value) 
{ 
    _count = value; 
} 

Вы просто синтаксический сахар в C# использовать эти методы примерно как поле, т.е.

instanceOfObject.Count = 42; // Not a field access, but behind the scenes a method call. 
+0

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

+0

@Mic halHainc Это справедливое мнение. Если вы считаете, что мой ответ не полезен или не вносит вклад в Stack Overflow, вы можете его проголосовать. – jdphenix

+0

Нет, я не хотел этого говорить, мне просто нравится принцип DRY ... и мне не нравятся дублированные вещи, ваша воля помочь другим разработчикам по-прежнему ценится, хотя –

1

Это «авто Реализуемый» свойство в C#. В действительности, имущество выступает в качестве полной собственности, т.е .:

Это:

public int Number { get; set; } 

эквивалентно:

private int _number; 

public int Number 
{ 
    get 
    { 
     return this._number; 
    } 
    set 
    { 
     this._number = value; 
    } 
} 

Это предотвращает Вас от необходимости вводить полную декларацию собственности. Это полезно, когда у вас нет дополнительной логики в приемнике и/или сеттере.

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

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