Generics
Upcoming SlideShare
Loading in...5
×
 

Generics

on

  • 2,607 views

Presentation about Generics, generic Colections, Custom collections and generic delegates

Presentation about Generics, generic Colections, Custom collections and generic delegates

Statistics

Views

Total Views
2,607
Views on SlideShare
2,603
Embed Views
4

Actions

Likes
1
Downloads
43
Comments
0

1 Embed 4

http://www.slideshare.net 4

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Generics Generics Presentation Transcript

  • Язык C# Generics System.Collections.Generic Алексей Бованенко
  • Использование object
    • class TestClass{ private object obj; public void Add(object obj){ this.obj=obj; } public object Get(){ return obj; } }
  • Возможность ошибки
    • string s= «Hello, world»;
    • TestClass tc = new TestClass();
    • tc. Add(s) ;
    • ...
    • int i = (int)tc.Get() ;
  • Использование коллекций
    • System.Collections
    • ArrayList
  • Класс ArrayList
    • Конструкторы
    • ArrayList()
    • ArrayList( ICollection )
    • ArrayList( int capacity)
    • Добавление элементов
    • int Add( object value)
    • void AddRange( ICollection )
    • Удаление элементов
    • void Clear()
    • Remove( object )
    • RemoveAt( int )
  • Класс ArrayList
    • Обращение к элементам
    • object this [ int index] { get ; set ; }
    • Количество элементов
    • int Count { get ; }
    • Емкость
    • int Capacity { get ; set ; }
    • Поиск
    • int IndexOf( object value)
    • int LastIndexOf( object value)
  • Работа с ArrayList
    • class ArrayListTest{ private ArrayList arr; public void Add(object o){ arr. Add (o); } public object Get(){ return arr[ 0 ] ; } }
  • Использование Generic
  • Обобщенные типы
  • Generic типы
    • class GenericTest <T> { private T field; private T [] arr=new T [10]; public void Add( T o){ field=o; arr[0]=o; } }
  • Использование Generic
    • string s = «Hello, world»;
    • GenericTest <string> gt = new GenericTest <string> ();
    • gt. Add(s) ;
    • Cinsole.WriteLine(gt. Get() );
  • Обобщенные методы
  • Обобщенный метод
    • Член обобщенного типа
      • class TestClass<T>{ private T t; public void M1<U>(U u){ Console.WriteLine(typeof(U)); } }
    • Член обычного класса
      • class TestClass{ private T t; public void M1<U>(U u){ Console.WriteLine(typeof(U)); } }
  • Пример метода
    • class TestClass{ public void TestMethod<T> (T t){ Console.WriteLine(«Test value: {0}»,t.ToString()); } public void TestMethod2<T> (){ Console.WriteLine(typeof(T)); } }
  • Вызов метода
    • С указанием параметра
      • string s= «Hello, world»;
      • TestMethod<string>(s);
      • TestMethod2<string> ();
    • Без указания параметра
      • string s = «Hello, world»;
      • TestMethod(s) ;
  • Обобщенный базовый тип
  • Базовый тип
    • class Class1 <U> where U : IComparable <U> { protected U u1; }
  • Обобщенный дочерний тип
    • class Class2 <U> : Class1 <U> where U : IComparable <U> { public Class2(U t) { base .u1 = t; } }
  • Необобщенный дочерний тип
    • class Class3 : Class1 < string >{ public Class3( string u) { base .u1 = u; } }
  • Обобщенные структуры
    • struct Struct1 <T> { public T t1; public T t2; }
    • Struct1 < double > st; st.t1 = 10.234; st.t2 = 12.432;
  • Обобщенный интерфейс
  • Обобщенные интерфейсы
    • public interface Iface <T> { void Set(T t); T Get(); }
  • Реализация обобщенного интерфейса
    • class Class6 : Iface < string > { private T t; public void Set( string t) { this.t=t; } public string Get() { return t; } }
  • Реализация обобщенного интерфейса class Class7 <T> : Iface <T> { private T t; public void Set(T t) { this.t=t; } public T Get() { return t; } }
  • default значения
    • class TestClass <T> { public void Method(T t) { T t1= default(T) ; Console.WriteLine(«Value t={0}, t1={1}»,t, t1); }
    • }
  • Ограничения
  • Ограничения на типы
    • where T: struct
    • where T : class
    • where T : new()
    • where T : <base class name>
    • where T : <interface name>
    • where T : U
  • Ограничения. Обобщенные классы
    • class TestClass<T> where T : IComparable<T>
  • Ограничения. Обобщенные методы
    • public void TestMethod<U>(U u1, U u2) where U: IComarable<U>
  • Ограничения на операции
    • Параметры типов не поддерживают следующие операции
      • +
      • -
      • /
      • *
  • Пользовательские коллекции
  • Пример пользовательской коллекции
    • class Class1 <T> : IEnumerable <T> { T[] arr; public Class1(T a) { arr = new T[10]; for ( int i = 0; i < 10; ++i) arr[i] = a; }
  • Пример пользовательской коллекции
    • #region IEnumerable<T> Members public IEnumerator <T> GetEnumerator() { foreach (T t in arr) yield return t; } #endregion
  • Пример пользовательской коллекции
    • #region IEnumerable Members System.Collections. IEnumerator System.Collections. IEnumerable .GetEnumerator() { return arr.GetEnumerator(); } #endregion
  • Использование пользовательской коллекции
    • Class1 < string > coll = new Class1 < string >( &quot;Test&quot; ); foreach ( string cl in coll) Console .WriteLine(cl); IEnumerable < string > ien = coll; IEnumerator < string > ienum = ien.GetEnumerator(); while (ienum.MoveNext()) Console .WriteLine(ienum.Current);
  • Обобщенный делегаты
  • Обобщенный делегат
    • class Class1 <T> : IComparable < Class1 <T>> where T : IСomparable <T> { private T t1; private T t2; public Class1(T t1, T t2) { this .t1 = t1; this .t2 = t2; } public T T1 { set { t1 = value ; } get { return t1; } } public T T2 { set { t2 = value ; } get { return t2; } } public int CompareTo( Class1 <T> t1) { return this .t1.CompareTo(t1.t1); } }
  • Создание делегата
    • static void Main( string [] args) { Class1 < string >[] arr = new Class1 < string >[5]; Random r= new Random (); for ( int i = 0; i < 5; ++i) arr[i] = new Class1 < string >( string .Format( &quot;{0}&quot; ,i), string .Format( &quot;Value{0}&quot; ,100-i*10)); Array .Sort(arr, new Comparison < Class1 < string >>(Comp)); }
    • static int Comp<T>(T t1, T t2) where T : Icomparable <T> { return t1.CompareTo(t2); }
  • Вложенный делегат
    • class Program <T> where T : IComparable <T> { private T[] arr; public Program(T t1) { arr = new T[5]; for ( int i = 0; i < 5; ++i) arr[i] = t1; } public void Sort() { Array .Sort(arr, new Comparison <T>(Comp)); } public int Comp(T t1, T t2) { return t1.CompareTo(t2); } }
  • Использование System.Collections. Generic
  • Классы Collections и Collections.Generic
  • Интерфейсы
    • ICollection<T>
    • IComparer<T>
    • IDictionary<K, V>
    • IEnumerable<T>
    • IEnumerator<T>
    • IList<T>
  • Интерфейс ICollection <T>
    • interface ICollection <T> : IEnumerable <T>, IEnumerable
    • int Count { get ; }
    • bool IsReadOnly { get ; }
    • void Add(T item)
    • void Clear()
    • bool Contains(T item)
    • void CopyTo(T[] array, int arrayIndex)
    • bool Remove(T item)
  • Интерфейс IList <T>
    • T this [ int index] { get ; set ; }
    • int IndexOf(T item)
    • void Insert( int index, T item)
    • void RemoveAt( int index)
  • Классы реализаций
  • Классы
    • List<T>
    • LinkedList<T>
    • Stack<T>
    • Queue<T>
  • Класс List<T>
    • Конструкторы
    • List()
    • List( IEnumerable <T> collection)
    • List( int capacity)
    • Свойства
    • int Capacity { get ; set ; }
    • int Count { get ; }
    • T this [ int index] { get ; set ; }
  • Класс List<T>
    • Добавление
    • void Add(T item)
    • void AddRange( IEnumerable <T> collection)
    • void Insert( int index, T item)
    • void InsertRange( int index, IEnumerable <T> collection)
  • Класс List<T>
    • Удаление
    • void Clear()
    • bool Remove(T item)
    • int RemoveAll( Predicate <T> match)
    • void RemoveAt( int index)
    • void RemoveRange( int index, int count)
  • Класс List<T>
    • Сортировка
    • void Sort()
    • void Sort( Comparison <T> comparison)
    • int Comparison <T>(T x, T y)
    • void Sort( IComparer <T> comparer)
    • void Sort( int index, int count, IComparer <T> comparer)
  • Класс List<T>
    • Поиск
    • List <T> FindAll( Predicate <T> match)
    • int FindIndex( Predicate <T> match)
    • delegate bool Predicate <T>(T obj)
    • int FindIndex( int startIndex, Predicate <T> match)
    • T FindLast( Predicate <T> match)
    • int FindLastIndex( Predicate <T> match)
  • Класс List<T>
    • Поиск
    • int FindLastIndex( int startIndex, Predicate <T> match)
    • int IndexOf(T item)
    • int IndexOf(T item, int index)
    • int LastIndexOf(T item)
    • int LastIndexOf(T item, int index)
  • Класс List<T>
    • Операции
    • void ForEach( Action <T> action)
    • delegate void Action <T>(T obj)
  • Класс LinkedList<T>
    • Конструкторы
    • LinkedList()
    • LinkedList( IEnumerable <T> collection)
    • Свойства
    • int Count { get ; }
    • LinkedListNode <T> First { get ; }
    • LinkedListNode <T> Last { get ; }
  • Класс LinkedList<T>
    • Добавление
    • void AddAfter( LinkedListNode <T> node, LinkedListNode <T> newNode)
    • LinkedListNode <T> AddAfter( LinkedListNode <T> node, T value)
    • void AddBefore( LinkedListNode <T> node, LinkedListNode <T> newNode)
    • LinkedListNode <T> AddBefore( LinkedListNode <T> node, T value)
  • Класс LinkedList<T>
    • Добавление
    • void AddFirst( LinkedListNode <T> node)
    • LinkedListNode <T> AddFirst(T value)
    • void AddLast( LinkedListNode <T> node)
    • LinkedListNode <T> AddLast(T value)
  • Класс LinkedList<T>
    • Удаление
    • void Remove( LinkedListNode <T> node)
    • bool Remove(T value)
    • void RemoveFirst()
    • void RemoveLast()
  • Класс LinkedList<T>
    • Поиск
    • LinkedListNode <T> Find(T value)
    • LinkedListNode <T> FindLast(T value)
  • Класс LinkedListNode<T>
    • public LinkedListNode(T value)
    • public LinkedList <T> List { get ; }
    • public LinkedListNode <T> Next { get ; }
    • public LinkedListNode <T> Previous { get ; }
    • public T Value { get ; set ; }
  • Класс Stack<T>
    • Конструкторы
    • Stack()
    • Stack( IEnumerable <T> collection)
    • Stack( int capacity)
    • Свойства
    • int Count { get ; }
  • Класс Stack<T>
    • T Peek()
    • T Pop()
    • void Push(T item)
  • Класс Queue<T>
    • Конструкторы
    • Queue()
    • Queue( IEnumerable <T> collection)
    • Queue( int capacity)
    • Свойства
    • int Count { get ; }
  • Класс Queue<T>
    • Удаление из начала очереди
    • T Dequeue()
    • Добавление в конец очереди
    • void Enqueue(T item)
    • Просмотр элемента без удаления
    • T Peek()
  • Интерфейс IDictionary<T,V>
    • ICollection <TKey> Keys { get ; }
    • ICollection <TValue> Values { get ; }
    • TValue this [TKey key] { get ; set ; }
    • void Add(TKey key, TValue value)
    • bool ContainsKey(TKey key)
    • bool Remove(TKey key)
    • bool TryGetValue(TKey key, out TValue value)
  • Класс Dictionary<T,V>
    • Конструкторы
    • Dictionary()
    • Dictionary( IDictionary <TKey, TValue> dictionary)
    • Dictionary( IEqualityComparer <TKey> comparer)
    • Dictionary( int capacity)
  • Класс Dictionary<T,V>
    • Свойства
    • int Count { get ; }
    • Dictionary <TKey, TValue>. KeyCollection Keys { get ; }
    • Dictionary <TKey, TValue>. ValueCollection Values { get ; }
    • TValue this [TKey key] { get ; set ; }
  • Класс Dictionary<T,V>
    • void Add(TKey key, TValue value)
    • bool ContainsKey(TKey key)
    • bool ContainsValue(TValue value)
    • bool Remove(TKey key)
    • bool TryGetValue(TKey key, out TValue value)
  • Использование IEnumerator<KeyValuePair<T,V>>
    • IEnumerator < KeyValuePair < int , string >> ienum= idic.GetEnumerator();
    • while (ienum.MoveNext())
    • Console .WriteLine(ienum.Current.Key);
  • Использование foreach
    • foreach ( KeyValuePair < int , string > keyp in idic)
    • Console .WriteLine(ienum.Current.Key);
  • Конец Спасибо за внимание e-mail: a.bovanenko@gmail.com