Если вы не даете какой-либо позиции родителям, то по умолчанию требуется static
. Если вы хотите понять, что разница относится к этому примеру
Пример 1 ::
#mainall
{
background-color:red;
height:150px;
overflow:scroll
}
Здесь родительский класс не имеет позиции, поэтому элемент помещается в соответствии с телом.
Пример 2 ::
http://jsfiddle.net / Cr9KB / 2 /
#mainall
{
position:relative;
background-color:red;
height:150px;
overflow:scroll
}
В этом примере родитель имеет относительное положение, поэтому элемент помещается как абсолютный внутри относительного родителя.
Лично я использую ICollection<T>
для нормальных свойств, просто потому, что это хорошо известный интерфейс с минимальными издержками, т. Е. Он создает немного ICollection
, а не IList
. Конечно, вы можете использовать HashSet<T>
, который использует EF Core, но я считаю, что HashSet
установить немного сложнее, чем ICollection<T>
, который требует List<T>
.
Примечание: я не смотрел на скорость создания для любого из них - я просто делаю это, потому что книга «Руководства по проектированию фреймворка» демонстрирует это как лучшую практику - см. Страницу 250.
Единственное место, которое вы должны использовать HashSet<T>
, если вы используете неинициализированные коллекции резервных полей, например
private HashSet<Review> _reviews;
public IEnumerable<Review> Reviews => _reviews?.ToList();
IEnumerable<T>
является особым случаем, потому что он превращает коллекцию в версию только для чтения, поскольку IEnumerable
не имеет метода Add
или Remove
. Поддержка полей плюс IEnumerable<T>
(см. Код выше) позволяет вам «заблокировать» отношения коллекции, чтобы их можно было изменить только изнутри класса (см. Мою статью Управляемый доменом дизайн в EF Core ) . [+1122]
Когда я использую вспомогательные коллекции полей, я оставляю их неинициализированными, поэтому они должны быть HashSet<T>
. Это позволяет мне определить, когда я забыл использовать .Include при загрузке объекта, например, если бы я загрузил книгу без .Include(p => p.Reviews)
и затем обратился к свойству Reviews, я бы получил исключение нулевой ссылки. Это просто безопасный способ программирования.
Если вы инициализируете коллекцию вспомогательных полей, то это может быть ICollection
и т. Д., Но я не рекомендую инициализировать коллекцию вспомогательных полей, потому что это может вызвать проблемы, если вы забудете включить и затем добавите элемент в коллекцию. В этом случае EF Core удаляет все существующие обзоры и заменяет их новыми, которые вы добавили. С точки зрения EF Core, он делает то, что вы сказали, но, скорее всего, НЕ то, что вы намеревались.