Когда необходимо использовать поле, а не свойство?

Вы должны передать идентификатор ссылки на соединение, а также проверить наличие ошибок.

$con = mysqli_connect("localhost","my_user","my_password","my_db");

// Check connection
if (mysqli_connect_errno())
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

Также после выполнения запроса вы можете снова проверить на наличие ошибок.

if (!mysqli_query($con,"INSERT INTO a4_todolist (item) VALUES ('$item')")) {
    echo("Error description: " . mysqli_error($con));
}
10
задан Marc Gravell 13 March 2009 в 08:29
поделиться

6 ответов

Хорошо в C# 3.0 можно на самом деле записать:

public string Name {get; set;}

Который позволяет Вам быть надлежащими и ленивыми.

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

Это - вероятно, предпочтение с одной частью, и одна часть, как Ваша команда решает обработать быстрые и грязные определения классов, но я сказал бы, использует свойства для, получают/устанавливают.

Ответить

Кто-либо может ясно ясно сформулировать, когда Вы используете атрибут и когда использовать свойство в дизайне класса?

Вы никогда не должны использовать общедоступный атрибут. Необходимо всегда использовать свойство вместо этого. Это более безопасно и более гибко. Тем не менее люди будут ленивы, и просто использовать общедоступного участника. Однако с C# 3.0 можно использовать более краткий синтаксис для определения свойств, которые должны удовлетворить внутреннюю лень.

Просто введите prop и хит <tab> ускорить лень в добавлении свойства.

15
ответ дан 3 December 2019 в 14:44
поделиться

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

Они также делают рефакторинг легче.

Больше информации:

3
ответ дан 3 December 2019 в 14:44
поделиться

Просто некоторая дополнительная информация к ответу Alan:

public string Name {get; set;}

совпадает с

private string _Name;

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

Если Вы хотите запретить функцию множества Имени, Вы можете иметь

общедоступное имя строки {добирается; частный набор;}

14
ответ дан 3 December 2019 в 14:44
поделиться

Когда Вы обнародовали поле, Вы позволяете пользователю делать независимо от того, что они хотят сделать к полю. Они могут присвоить неожиданные значения, недопустимые значения, значения, которые могут вызвать переполнение и т.д.

Со свойством Вы управляете, позволить ли установку новых значений к полю, массирование значения прежде, чем сохранить его, уведомив заинтересованные стороны об изменении значения поля, и т.д. И та же идея для того, чтобы возвратить значение через метод считывания. Для платформы.NET от 2,0, можно установить средство доступа для метода считывания, метода set. Скажите, Вы только хотите, чтобы у пользователя только был доступ для чтения к полю, затем Вы обнародовали метод считывания, но метод set, частный или защищенный.

0
ответ дан 3 December 2019 в 14:44
поделиться

В дополнение к уже данным причинам предпочтения свойств существует также много интересного материала в Системе. ComponentModel, чтобы сделать с привязкой данных и уведомлением об изменении, которое только работает со свойствами, а не полями. Например, посмотрите на документацию вокруг PropertyChangedHandler.

0
ответ дан 3 December 2019 в 14:44
поделиться

Используя свойства, которыми можно управлять, это - безопасность:

public string Foo { protected get; private set; }

Свойства дают простой способ сгенерировать события:

public string Foo
{
  get { return _foo; }
}
set
{
  bool cancel = false;
  if(BeforeEvent != null) // EventHandler<CancelEventArgs> BeforeEvent
  {
    CancelEventArgs e = new CancelEventArgs();
    BeforeEvent(this, e);
    cancel = e.Cancel;
  }
  if(!cancel)
  {
    _foo = value;
    if(AfterEvent != null) // EventHandler<EventArgs> AfterEvent
    {
      AfterEvent(this, new EventArgs());
    }
  }
}

Также я часто использую код как это:

string Foo
{
  set
  {
    IsFooSet = value != null;
  }
}

bool IsFooSet
{
  get { return _isFoo; }
  set
  { 
   _isFoo = value;
   if(value) // some event raise or controls on form change
  }
}
0
ответ дан 3 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: