Generics In and Out

Preview:

DESCRIPTION

 

Citation preview

Generics In and Out

Jaliya Udagedara

What are we going to discuss today?• Non-Generic Collections• Demo 1 : Non-Generic Collections• Generic Collections• Generic List<T> Class• Generic IEnumerable<T> Interface• Constraints on Type Parameter (T)• Demo 2 : Generic Collections (List<T>)• Demo 3 : Creating Custom Generic Class and more.• Advantages of Generics• Some Recommandations

Collections

ICollection

IList IDictionary

Non-Generic Collections• System.Collections (Not included in the default C#

template)• Examples

• ArrayList• HashTable etc.

• Store objects• Add anything.• Typecast on removal.

Demo 1

ArrayList and HashTable

Generic Collections• System.Collections.Generic (Included in the default C#

template)• Examples

• List<T>• Dictionary<TKey, TValue> etc.

• Store objects• Add item of specific type.• No need to box/unbox.

Generic Collections contd.• Generic Classes• Generic Interfaces• Generic Methods• Generic Delegates

The Generic List Class (List<T>)

• List<T> is the generic List class• T represents the type parameter to be supplied

in declarations.• Provides traditional list operations

• Insert/Delete

public class List<T> : IList<T>, ICollection<T>, IList, ICollection, IReadOnlyList<T>, IReadOnlyCollection<T>, IEnumerable<T>, IEnumerable

List<T> Methods• Add (T item)

• Add item at end of list• Insert (int index, T item)

• Insert item at a specific position• Remove (T item)

• Remove first occurrence of item• RemoveAt (int index)

• Remove item at specified position

List<T> Methods contd.• Clear()

• Removes all items from the list• bool Contains(T item)

• Determines if item is in the list• int IndexOf(T item)

• Returns index of item, or -1 if not in list.• Sort()

• Array.Sort method• Insertion Sort / Heap Sort or Quick Sort

• …more

The Generic IEnumerable<T> Interface

• Exposes the enumerator.• Simple iteration over a collection of a specified

type.• List<T> implements IEnumerable<T> • Methods

• GetEnumerator()• A lot of extension methods (visit MSDN)

public interface IEnumerable<out T> : IEnumerable

Generic Delegates• What is a Delegate?

• Function Pointer in C++.

static void Method1(string s) { // body } static void Method2(int i) { // body }

delegate void MyGenericDelegate<T>(T data);

Constraints on Type Parameter (T)• where T : struct

• T must be a value type• where T : class

• T must be reference type• where T : <base class>

• T must be deriving from base class• where T : <interface>

• T must be implementing the interface• where T : new()

• T must have parameter less constructor

Demo 2

List<T>

Demo 3

Custom Generic Class, Generic Methods, Type Constraints etc.

So what’s the advantage?

ReusableEfficient

Type Safe (in compile time too)

Recommendations• For all the applications which targets .NET 2.0 and

above use new generic collection classes instead of the older non-generic counterparts.

• For most scenarios that require collection classes, the recommended approach is to use the ones provided in the .NET Framework class library.

• If the items in the collection are being added/removed from different threads, use collections in the System.Collections.Concurrent which is introduced with .NET Framework 4.

Thank You!http://www.jaliyaudagedara.blogspot.com/

Recommended