Вы создали класс abstract :
public abstract class PasswordProtectedEditTextPreference
Неудивительно, что он не может быть создан, -)
Структуры хороши для атомарного представления данных, где упомянутые данные могут быть скопированы многократно кодом. Клонирование объекта является в целом более дорогим, чем копирование структуры, поскольку это включает выделение памяти, выполняя конструктора и освобождение/сборку "мусора" при выполнении с ним.
Используйте структуру, когда Вы захотите семантику значения в противоположность ссылочной семантике.
Не уверенный, почему люди являются downvoting это, но это - актуальный вопрос и было сделано, прежде чем op разъяснил его вопрос, и это - самая фундаментальная основная причина структуры.
при необходимости в ссылочной семантике, Вам нужен класс не структура.
Каждый раз, когда Вы не нуждаетесь в полиморфизме, хотите семантику значения и хотите избежать выделения "кучи" и связанной сборки "мусора" наверху. Протест, однако, состоит в том, что структуры (произвольно большой) являются более дорогими для раздавания, чем ссылки класса (обычно одно машинное слово), таким образом, классы могли закончить тем, что были быстрее на практике.
Я использую структуры для упаковки или распаковки любого вида двоичного коммуникационного формата. Это включает чтение или запись в диск, списки вершины DirectX, сетевые протоколы, или контакт с шифровал/сжимал данные.
Эти три инструкции, которые Вы перечисляете, не были полезны для меня в этом контексте. Когда я должен выписать четыреста байтов материала в Особом Порядке, я собираюсь определять четырехсотбайтовую структуру, и я собираюсь заполнять его любыми несвязанными значениями, которые он, как предполагается, имеет, и я собираюсь установить его независимо от того, что путь имеет большую часть смысла в то время. (Хорошо, четыреста байтов были бы довольно странными - но назад когда я писал файлы Excel для жизни, я имел дело со структурами приблизительно до сорока байтов на всем протяжении, потому что это - насколько большой некоторые записи СИЛЬНОГО УДАРА.)
Необходимо использовать "структуру" в ситуациях, где Вы хотите явно указать расположение памяти с помощью StructLayoutAttribute - обычно для PInvoke.
Редактирование: Комментарий указывает, что можно использовать класс или структуру с StructLayoutAttribute, и это, конечно, верно. На практике Вы обычно использовали бы структуру - она выделяется на стеке по сравнению с "кучей", которая имеет смысл, если Вы просто передаете аргумент неуправляемому вызову метода.
Во-первых: сценарии Interop или когда необходимо указать расположение памяти
111-секундный: Когда данные являются почти тем же размером как ссылочный указатель так или иначе.
Я думаю, что хорошее первое приближение никогда не.
я думаю, что хорошее второе приближение никогда не.
, Если Вы отчаянно нуждаетесь в перфекте, рассмотрите их, но затем всегда имейте размеры.
Я редко использую структуру для вещей. Но это - просто я. Это зависит, нужен ли мне объект быть nullable или нет.
, Как указано в других ответах, я использую классы для реальных объектов. У меня также есть мышление структур, используются для хранения небольших объемов данных.
За исключением valuetypes, которые используются непосредственно и различными другими во время выполнения в целях PInvoke, необходимо только использовать valuetypes в 2 сценариях.
Nah - я не полностью соглашаюсь с правилами. Они - хорошие инструкции для рассмотрения с производительностью и стандартизацией, но не в свете возможностей.
, Как Вы видите в ответах, существует много творческих способов использовать их. Так, эти инструкции должны просто быть то, что, всегда ради производительности и эффективности.
В этом случае, я использую классы для представления объектов реального мира в их большей форме, я использую структуры для представления меньших объектов, которые имеют более точное использование. Путем Вы сказали это, "более связное целое". Причем ключевое слово связно. Классы будут более объектно-ориентированными элементами, в то время как структуры могут иметь некоторые из тех характеристик, хотя в меньшем масштабе. IMO.
я использую их много в тегах Treeview и Listview, где к общим статическим атрибутам можно получить доступ очень быстро. Я всегда изо всех сил пытался получить эту информацию иначе. Например, в моих приложениях базы данных, я использую Treeview, где у меня есть Таблицы, SPS, Функции или любые другие объекты. Я создаю и заполняю свою структуру, помещаю ее в тег, вытаскиваю ее, получаю данные выбора и т.д. Я не сделал бы этого с классом!
я действительно пытаюсь сохранить их маленькими, использовать их в единственных ситуациях с экземпляром и помешать им изменяться. Благоразумно знать о памяти, выделении и производительности. И тестирование так необходимо.
Я не соглашаюсь с правилами, данными в исходном сообщении. Вот мои правила:
1) Вы используете структуры для производительности при хранении в массивах. (см. также , Когда структуры будут ответом? )
2) Вам нужны они в коде, передающем структурированные данные C/C++
, 3) не используют структуры, если Вам не нужны они: