Классы с наборами как свойства по сравнению с классами, наследовавшими наборы

// jQuery

$(".black-p").each(function() {
  const $this = $(this);
  console.log($this.attr("coin-type"))
});


// Javascript 
const xclassget = document.getElementsByClassName('black-p');

for (let i = 0; i < xclassget.length; i++) {
  console.log(xclassget[i].getAttribute("coin-type"));
};
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<article class="black-p stacard caading" coin-type="pageingx" coin-name="moonpa" coin-rank="1">


  <article class="black-p stacard caading" coin-type="YYYYYYY" coin-name="XXXXXX" coin-rank="Z">

    <article class="black-p stacard caading" coin-type="YYYYYYY" coin-name="XXXXXX" coin-rank="Z">

8
задан Don Kirkby 8 December 2008 в 20:07
поделиться

6 ответов

Проблема с этим состоит в том, что Ваш Автомобильный класс будет все еще иметь интерфейс, который он наследовал от Списка, который может позволить операции, которые Вы не хотите.

10
ответ дан 5 December 2019 в 06:10
поделиться

Я неправильно читал вопрос ранее.

Я предложил бы использовать состав вместо наследования. Если Вы хотите смочь использовать весь броский материал LINQ, любой ценой реализуйте IEnumerable<T> и возможно ровный IList<T> - но я не произошел бы из List<T> непосредственно.

Если Вы действительно хотите получить материал набора "бесплатно", но все еще сохранять контроль, Вы могли использовать CollectionBase. Это все еще связывает Вас с точки зрения Вашего выстрела в наследование, но по крайней мере Вы получаете больше контроля над тем, что происходит в наборе.

4
ответ дан 5 December 2019 в 06:10
поделиться

Это зависит от заключительной цели Вашего класса. Если это только собирается работать Вашей собственной реализацией наследования использования набора. В противном случае включайте набор как свойство. Вторая опция более универсальна:

  • Поскольку можно только наследоваться одному классу, Вы, возможно, должны были бы наследоваться другому классу, а не набору
  • Если необходимо рассматривать этот класс как набор, можно включать свойство индексатора.
6
ответ дан 5 December 2019 в 06:10
поделиться

Если Вы хотите, чтобы Ваш Автомобильный класс действовал точно так же, как Список и имел те же методы, чем это не это плохо. Вы просто происходите из него, и Вы сделаны. Затем, если Вы хотите добавить дополнительную функциональность, можно просто объявить те методы, и Вы сделаны. Однако Вы теперь обязаны Перечислить и если Список изменяется какими-либо нежелательными способами, Вы завинчены.

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

3
ответ дан 5 December 2019 в 06:10
поделиться

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

Я, однако, рассмотрел бы использование Набора <T> вместо Списка <T>, если Вам действительно не нужна функциональность в Списке <T>.

3
ответ дан 5 December 2019 в 06:10
поделиться

"Автомобильный" класс действительно требуется? Некоторые добавили функциональность, чем "Список"? В противном случае необходимо использовать "Список" (или лучше "IList").

Если класс "Автомобили" имеет добавленную функциональность, существует два основных сценария:

  • Этот класс является "заключительным" классом, нет никакой большой возможности, кто-то, в котором нуждаются другие, расширил его. Затем эта конструкция хорошо.
  • Этот класс будет, вероятно, использоваться в качестве базового класса. Затем я рекомендую использованию эту конструкцию:

.

public class CarList<T> : List<T> where T : Car {
    // some added functionality
}

Если Вы хотите, более гибки в будущем, необходимо использовать состав:

public class CarList<T> : IList<T> where T : Car {
    private IList<T> innerList;
    public CarList() { this.innerList = new List<T>(); }

    // implementation of IList<T>

    // some added functionality
}
1
ответ дан 5 December 2019 в 06:10
поделиться
Другие вопросы по тегам:

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