Лучший ресурс для обучения .СЕТЕВЫЕ дженерики?[закрыто]

StackOverflow https://stackoverflow.com/questions/85147

  •  01-07-2019
  •  | 
  •  

Вопрос

Я никогда не использовал ни один из дженериков .NET в своей работе, но я понимаю, что они довольно популярны.Есть ли у кого-нибудь хорошие ссылки или предложения по книгам для их изучения?В качестве бонуса;Я лишь смутно понимаю, что такое .СЕТЕВЫЕ универсальные коллекции и что они делают ... есть ли у кого-нибудь практические примеры того, как их можно использовать с большей пользой, чем обычные коллекции в .NET?

Это было полезно?

Другие советы

Очевидный выбор..

Обобщения MSDN C #

CLR via C # Джеффри Рихтера подробно описывает дженерики и является одним из бесценных ресурсов, которыми должен владеть и читать каждый .NET-разработчик.

Если вы когда-либо использовали шаблоны C ++, то .Сетевые дженерики - это почти то же самое.Они даже используют похожий <T> синтаксис.

Даже если вы не знаете ни одного C ++, вы, вероятно, усложняете задачу больше, чем нужно, особенно в отношении коллекций.Они такие же, как любая другая коллекция, но когда вы их создаете, вы указываете имя типа внутри <<> таким образом, компилятор знает, какой элемент они содержат.

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

Я нашел профессиональные дженерики WROX для .NET 2.0 очень полезными, поскольку они содержат множество примеров из реального мира.Дженерики могут сбить с толку новичка, но они могут быть очень полезным / мощным / экономящим время инструментом в руках опытного разработчика.Лично я нахожу .NET Generics наиболее полезными для упрощения определения и использования коллекций.Кроме того, использование дженериков может привести к более эффективному коду, поскольку это может свести к минимуму снижение производительности, обычно связанное с преобразованиями типов упаковки / распаковки.

Лучше всего пройти обучение в Microsoft по этому вопросу.Если вы ищете книги, то идеально подойдут следующие:

http://www.microsoft.com/MSPress/books/9469.aspx

Мой голос за то, чтобы в основном вы могли просто избегать их :)

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

Если кастинг вас так сильно раздражает, может быть, вам пора рассмотреть динамические языки, такие как IronPython :)

И - если вы действительно столкнетесь со сценарием, который, по вашему мнению, имеет общий смысл, опубликуйте его как еще один вопрос, мозги здесь могли бы посмотреть вместе и решить его в каждом конкретном случае :)

Обновить:Да, проверка компилятором хороша, но проверьте исходный код Castle Project, вы можете увидеть много ситуаций, когда универсальный тип мешает, потому что вы не можете выполнить приведение - создание таких вещей, как IBusinessObject, намного более гибко, чем BusinessObject, - потому что вы не можете привести что-то, унаследованное от BusinessObject, обратно к BusinessObject и ожидает доступа к унаследованной функции.Обычно я видел, что код заканчивается как BusinessObjectBase -> BusinessObject -> Ваш фактический класс.Вот почему я вроде как чувствую, что не всегда выгодно использовать дженерики - и я был одним из тех, кто злоупотреблял такой реализацией и в итоге получил массу забавных функций с универсальным набором текста, совсем не приятных.

Обновление №2:Упаковка / распаковка просто означает требование приведения объекта, когда вы используете абстрактный тип (например, object) для хранения значения и используете строго типизированное значение для его повторного сохранения (что требует приведения), особой разницы я не вижу, кроме ситуации с коллекцией, которую я изложил.И подобный код все еще работает в боксе:

public T GetValue<T>() {
  return (T) ...;
}

Это обычное злоупотребление, которое я видел чаще всего.Люди думают, что здесь они имеют дело с туземным типом, на самом деле это не так.Вместо этого они просто преобразуют приведение к общему синтаксису.Что действительно имеет смысл, так это следующее:

public class MyList<T>
{
  private List<T> _list;
...
public T GetValue(int index)
{
  return _list[index];
}

Затем мы снова возвращаемся к хранилищу нашей коллекции.Вот почему я сказал, что после хранения коллекции я не вижу большого шанса, что дженерик поможет.Ссылка взята из этого руководства:http://en.csharp-online.net/Understanding_Generics-Revisiting_Boxing_and_Unboxing

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top