Различия между частными полями и частными собственностями

Обновление: прежде чем вы прочитаете, я хочу заметить, что у меня не было никаких проблем, так как я обновил VirtualBox до 4.3.4.

Я использую VirtualBox 4.3.2 под Ubuntu 13.10. У меня была такая же проблема после обновления с Genymotion 2.0.0 до 2.0.1.

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

Шаг 1. Запустите VirtualBox, перейдите в меню «Файл / Настройки», перейдите в раздел «Сеть», выберите вкладку «Только хост-сети».

Если у вас нет адаптера, вы можете его создать (как указано ниже), или вы можете проигнорировать шаг 1, и Genymotion создаст его при попытке запустить виртуальную машину.

Если у вас есть адаптер (vboxnet0), нажмите кнопку «Изменить». В окне редактирования должен быть включен DHCP-сервер И IP-адрес и пул распределения сервера должны быть в той же сети, что и IP-адрес сетевого контроллера. Например, я использую:

  • IPv4 address / netmask: 192.168.56.1/255.255.255.0 (на вкладке Adapter)
  • Включен DHCP-сервер (на вкладке DHCP-сервера)
  • Адрес сервера / сетевая маска: 192.168.56.100/255.255.255.0
  • Адрес сервера / 192: Все еще в VirtualBox выберите выбранную вами виртуальную машину Android, нажмите кнопку «Параметры», выберите раздел «Сеть». На вкладке «Адаптер 1» вы должны:

    • Включить сетевой адаптер
    • Прикреплено к: адаптер только для хоста
    • Имя: vboxnet0

    Обычно, если у вас есть все эти настройки, он должен работать нормально, но это не для меня. Итак, я перешел к шагу 2.

    Шаг 2. Как указано в Genymotion, запустите VirtualBox, перейдите в меню «Файл / Предпочтения», перейдите в раздел «Сеть», выберите вкладку «Только узлы сети» и удалите определенные адаптеры.

    Запустите свою виртуальную машину в Genymotion. Genymotion воссоздает адаптер с правильными настройками (как описано в шаге 1)

    Обычно, если шаг 1 не работает для вас, шаг 2 должен работать нормально, но это не для меня. Итак, я перешел к шагу 3.

    Шаг 3. Удалите и заново создайте виртуальную машину Android в Genymotion (настройки сети только для VirtualBox, которые я оставил, как описано в шаге 1).

    моя проблема и Android VM работают нормально. Удачи.

    Andrei.

    Обновление: через день после отправки ответа, когда я впервые начал виртуальную машину в genymotion, он снова повторил ту же ошибку, и процесс vboxnetdhcp разбился (и перезапустился ). На вторых и более поздних попытках запуска он работал нормально. Таким образом, все еще может быть какая-то небольшая проблема с процессом DHCP VirtualBox.

    Обновление: проблема, похоже, находится на виртуальном сервере DHCP-сервера, который сбой:

    /usr/lib/virtualbox/VBoxNetDHCP --network HostInterfaceNetworking-vboxnet0 --trunk-type netflt --trunk-name vboxnet0 --mac-address 08:00:27:72:4C:7B --ip-address 192.168.56.100 --netmask 255.255.255.0 --verbose
    Floating point exception (core dumped)
    

    Удаление и повторное создание VM снова исправила проблему. Возможно, Genymotion отправляет некоторые недействительные данные в VBox DHCP, что приводит к сбою (все же ошибка VBox).

36
задан demoncodemonkey 30 June 2009 в 13:35
поделиться

6 ответов

Частные собственности позволяют Вам абстрагировать свои внутренние данные так, чтобы изменения во внутреннем представлении не должны были влиять на другие части Вашей реализации, даже в том же классе. Частные поля не предлагают это преимущество. С автоматическими свойствами в C# 3.0 я редко вижу потребность реализовать поля непосредственно - частный или общедоступный.

26
ответ дан tvanfosson 27 November 2019 в 05:57
поделиться

Большое усиление, которое можно получить от свойства (частный, общедоступный...) - то, что оно может произвести расчетное значение по сравнению с установленным значением. Например

class Person { 
  private DateTime _birthday;
  private int _age { get { return (DateTime.Now - _birthday).TotalYears; }
}

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

19
ответ дан Jacob Bundgaard 27 November 2019 в 05:57
поделиться

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

11
ответ дан Raminder 27 November 2019 в 05:57
поделиться

Доступ свойства будет (незначительно) медленнее, как он позвонит методу get/методу set. Преимущество - то, что можно сделать подтверждение правильности данных, которое может тогда отфильтровать наследникам, если Вы изменяете свойство, которое будет защищено, например.

0
ответ дан Rowland Shaw 27 November 2019 в 05:57
поделиться

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

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

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

0
ответ дан tylermac 27 November 2019 в 05:57
поделиться

Другой тогда, чему уже ответили, Производительность, symantics и completness там являются одним допустимым случаем, я видел частные собственности вместо частного поля:

public class Item
{
    private Item _parent;
    private List<Item> _children;

    public void Add(Item child)
    {
        if (child._parent != null)
        {
            throw new Exception("Child already has a parent");
        }
        _children.Add(child);
        child._parent=this;
    }
}

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

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

4
ответ дан JoshBerke 27 November 2019 в 05:57
поделиться
Другие вопросы по тегам:

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