Generics

1,733 views
1,642 views

Published on

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

Published in: Technology, Sports
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,733
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
47
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • Generics

    1. 1. Язык C# Generics System.Collections.Generic Алексей Бованенко
    2. 2. Использование object <ul> <li>class TestClass{ private object obj; public void Add(object obj){ this.obj=obj; } public object Get(){ return obj; } } </ul>
    3. 3. Возможность ошибки <ul> <li>string s= «Hello, world»; <li>TestClass tc = new TestClass(); <li>tc. Add(s) ; <li>... <li>int i = (int)tc.Get() ; </ul>
    4. 4. Использование коллекций <ul> <li>System.Collections <li>ArrayList </ul>
    5. 5. Класс ArrayList <ul> <li>Конструкторы <li>ArrayList() <li>ArrayList( ICollection ) <li>ArrayList( int capacity) <li>Добавление элементов <li>int Add( object value) <li>void AddRange( ICollection ) <li>Удаление элементов <li>void Clear() <li>Remove( object ) <li>RemoveAt( int ) </ul>
    6. 6. Класс ArrayList <ul> <li>Обращение к элементам <li>object this [ int index] { get ; set ; } <li>Количество элементов <li>int Count { get ; } <li>Емкость <li>int Capacity { get ; set ; } <li>Поиск <li>int IndexOf( object value) <li>int LastIndexOf( object value) </ul>
    7. 7. Работа с ArrayList <ul> <li>class ArrayListTest{ private ArrayList arr; public void Add(object o){ arr. Add (o); } public object Get(){ return arr[ 0 ] ; } } </ul>
    8. 8. Использование Generic
    9. 9. Обобщенные типы
    10. 10. Generic типы <ul> <li>class GenericTest <T> { private T field; private T [] arr=new T [10]; public void Add( T o){ field=o; arr[0]=o; } } </ul>
    11. 11. Использование Generic <ul> <li>string s = «Hello, world»; <li>GenericTest <string> gt = new GenericTest <string> (); <li>gt. Add(s) ; <li>Cinsole.WriteLine(gt. Get() ); </ul>
    12. 12. Обобщенные методы
    13. 13. Обобщенный метод <ul> <li>Член обобщенного типа <ul> <li>class TestClass<T>{ private T t; public void M1<U>(U u){ Console.WriteLine(typeof(U)); } } </ul> <li>Член обычного класса <ul> <li>class TestClass{ private T t; public void M1<U>(U u){ Console.WriteLine(typeof(U)); } } </ul> </ul>
    14. 14. Пример метода <ul> <li>class TestClass{ public void TestMethod<T> (T t){ Console.WriteLine(«Test value: {0}»,t.ToString()); } public void TestMethod2<T> (){ Console.WriteLine(typeof(T)); } } </ul>
    15. 15. Вызов метода <ul> <li>С указанием параметра <ul> <li>string s= «Hello, world»; <li>TestMethod<string>(s); <li>TestMethod2<string> (); </ul> <li>Без указания параметра <ul> <li>string s = «Hello, world»; <li>TestMethod(s) ; </ul> </ul>
    16. 16. Обобщенный базовый тип
    17. 17. Базовый тип <ul> <li>class Class1 <U> where U : IComparable <U> { protected U u1; } </ul>
    18. 18. Обобщенный дочерний тип <ul> <li>class Class2 <U> : Class1 <U> where U : IComparable <U> { public Class2(U t) { base .u1 = t; } } </ul>
    19. 19. Необобщенный дочерний тип <ul> <li>class Class3 : Class1 < string >{ public Class3( string u) { base .u1 = u; } } </ul>
    20. 20. Обобщенные структуры <ul> <li>struct Struct1 <T> { public T t1; public T t2; } <li>Struct1 < double > st; st.t1 = 10.234; st.t2 = 12.432; </ul>
    21. 21. Обобщенный интерфейс
    22. 22. Обобщенные интерфейсы <ul> <li>public interface Iface <T> { void Set(T t); T Get(); } </ul>
    23. 23. Реализация обобщенного интерфейса <ul> <li>class Class6 : Iface < string > { private T t; public void Set( string t) { this.t=t; } public string Get() { return t; } } </ul>
    24. 24. Реализация обобщенного интерфейса class Class7 <T> : Iface <T> { private T t; public void Set(T t) { this.t=t; } public T Get() { return t; } }
    25. 25. default значения <ul> <li>class TestClass <T> { public void Method(T t) { T t1= default(T) ; Console.WriteLine(«Value t={0}, t1={1}»,t, t1); } <li>} </ul>
    26. 26. Ограничения
    27. 27. Ограничения на типы <ul> <li>where T: struct <li>where T : class <li>where T : new() <li>where T : <base class name> <li>where T : <interface name> <li>where T : U </ul>
    28. 28. Ограничения. Обобщенные классы <ul> <li>class TestClass<T> where T : IComparable<T> </ul>
    29. 29. Ограничения. Обобщенные методы <ul> <li>public void TestMethod<U>(U u1, U u2) where U: IComarable<U> </ul>
    30. 30. Ограничения на операции <ul> <li>Параметры типов не поддерживают следующие операции <ul> <li>+ <li>- <li>/ <li>* </ul> </ul>
    31. 31. Пользовательские коллекции
    32. 32. Пример пользовательской коллекции <ul> <li>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; } </ul>
    33. 33. Пример пользовательской коллекции <ul> <li>#region IEnumerable<T> Members public IEnumerator <T> GetEnumerator() { foreach (T t in arr) yield return t; } #endregion </ul>
    34. 34. Пример пользовательской коллекции <ul> <li>#region IEnumerable Members System.Collections. IEnumerator System.Collections. IEnumerable .GetEnumerator() { return arr.GetEnumerator(); } #endregion </ul>
    35. 35. Использование пользовательской коллекции <ul> <li>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); </ul>
    36. 36. Обобщенный делегаты
    37. 37. Обобщенный делегат <ul> <li>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); } } </ul>
    38. 38. Создание делегата <ul> <li>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)); } <li>static int Comp<T>(T t1, T t2) where T : Icomparable <T> { return t1.CompareTo(t2); } </ul>
    39. 39. Вложенный делегат <ul> <li>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); } } </ul>
    40. 40. Использование System.Collections. Generic
    41. 41. Классы Collections и Collections.Generic
    42. 42. Интерфейсы <ul> <li>ICollection<T> <li>IComparer<T> <li>IDictionary<K, V> <li>IEnumerable<T> <li>IEnumerator<T> <li>IList<T> </ul>
    43. 43. Интерфейс ICollection <T> <ul> <li>interface ICollection <T> : IEnumerable <T>, IEnumerable <li>int Count { get ; } <li>bool IsReadOnly { get ; } <li>void Add(T item) <li>void Clear() <li>bool Contains(T item) <li>void CopyTo(T[] array, int arrayIndex) <li>bool Remove(T item) </ul>
    44. 44. Интерфейс IList <T> <ul> <li>T this [ int index] { get ; set ; } <li>int IndexOf(T item) <li>void Insert( int index, T item) <li>void RemoveAt( int index) </ul>
    45. 45. Классы реализаций
    46. 46. Классы <ul> <li>List<T> <li>LinkedList<T> <li>Stack<T> <li>Queue<T> </ul>
    47. 47. Класс List<T> <ul> <li>Конструкторы <li>List() <li>List( IEnumerable <T> collection) <li>List( int capacity) <li>Свойства <li>int Capacity { get ; set ; } <li>int Count { get ; } <li>T this [ int index] { get ; set ; } </ul>
    48. 48. Класс List<T> <ul> <li>Добавление <li>void Add(T item) <li>void AddRange( IEnumerable <T> collection) <li>void Insert( int index, T item) <li>void InsertRange( int index, IEnumerable <T> collection) </ul>
    49. 49. Класс List<T> <ul> <li>Удаление <li>void Clear() <li>bool Remove(T item) <li>int RemoveAll( Predicate <T> match) <li>void RemoveAt( int index) <li>void RemoveRange( int index, int count) </ul>
    50. 50. Класс List<T> <ul> <li>Сортировка <li>void Sort() <li>void Sort( Comparison <T> comparison) <li>int Comparison <T>(T x, T y) <li>void Sort( IComparer <T> comparer) <li>void Sort( int index, int count, IComparer <T> comparer) </ul>
    51. 51. Класс List<T> <ul> <li>Поиск <li>List <T> FindAll( Predicate <T> match) <li>int FindIndex( Predicate <T> match) <li>delegate bool Predicate <T>(T obj) <li>int FindIndex( int startIndex, Predicate <T> match) <li>T FindLast( Predicate <T> match) <li>int FindLastIndex( Predicate <T> match) </ul>
    52. 52. Класс List<T> <ul> <li>Поиск <li>int FindLastIndex( int startIndex, Predicate <T> match) <li>int IndexOf(T item) <li>int IndexOf(T item, int index) <li>int LastIndexOf(T item) <li>int LastIndexOf(T item, int index) </ul>
    53. 53. Класс List<T> <ul> <li>Операции <li>void ForEach( Action <T> action) <li>delegate void Action <T>(T obj) </ul>
    54. 54. Класс LinkedList<T> <ul> <li>Конструкторы <li>LinkedList() <li>LinkedList( IEnumerable <T> collection) <li>Свойства <li>int Count { get ; } <li>LinkedListNode <T> First { get ; } <li>LinkedListNode <T> Last { get ; } </ul>
    55. 55. Класс LinkedList<T> <ul> <li>Добавление <li>void AddAfter( LinkedListNode <T> node, LinkedListNode <T> newNode) <li>LinkedListNode <T> AddAfter( LinkedListNode <T> node, T value) <li>void AddBefore( LinkedListNode <T> node, LinkedListNode <T> newNode) <li>LinkedListNode <T> AddBefore( LinkedListNode <T> node, T value) </ul>
    56. 56. Класс LinkedList<T> <ul> <li>Добавление <li>void AddFirst( LinkedListNode <T> node) <li>LinkedListNode <T> AddFirst(T value) <li>void AddLast( LinkedListNode <T> node) <li>LinkedListNode <T> AddLast(T value) </ul>
    57. 57. Класс LinkedList<T> <ul> <li>Удаление <li>void Remove( LinkedListNode <T> node) <li>bool Remove(T value) <li>void RemoveFirst() <li>void RemoveLast() </ul>
    58. 58. Класс LinkedList<T> <ul> <li>Поиск <li>LinkedListNode <T> Find(T value) <li>LinkedListNode <T> FindLast(T value) </ul>
    59. 59. Класс LinkedListNode<T> <ul> <li>public LinkedListNode(T value) <li>public LinkedList <T> List { get ; } <li>public LinkedListNode <T> Next { get ; } <li>public LinkedListNode <T> Previous { get ; } <li>public T Value { get ; set ; } </ul>
    60. 60. Класс Stack<T> <ul> <li>Конструкторы <li>Stack() <li>Stack( IEnumerable <T> collection) <li>Stack( int capacity) <li>Свойства <li>int Count { get ; } </ul>
    61. 61. Класс Stack<T> <ul> <li>T Peek() <li>T Pop() <li>void Push(T item) </ul>
    62. 62. Класс Queue<T> <ul> <li>Конструкторы <li>Queue() <li>Queue( IEnumerable <T> collection) <li>Queue( int capacity) <li>Свойства <li>int Count { get ; } </ul>
    63. 63. Класс Queue<T> <ul> <li>Удаление из начала очереди <li>T Dequeue() <li>Добавление в конец очереди <li>void Enqueue(T item) <li>Просмотр элемента без удаления <li>T Peek() </ul>
    64. 64. Интерфейс IDictionary<T,V> <ul> <li>ICollection <TKey> Keys { get ; } <li>ICollection <TValue> Values { get ; } <li>TValue this [TKey key] { get ; set ; } <li>void Add(TKey key, TValue value) <li>bool ContainsKey(TKey key) <li>bool Remove(TKey key) <li>bool TryGetValue(TKey key, out TValue value) </ul>
    65. 65. Класс Dictionary<T,V> <ul> <li>Конструкторы <li>Dictionary() <li>Dictionary( IDictionary <TKey, TValue> dictionary) <li>Dictionary( IEqualityComparer <TKey> comparer) <li>Dictionary( int capacity) </ul>
    66. 66. Класс Dictionary<T,V> <ul> <li>Свойства <li>int Count { get ; } <li>Dictionary <TKey, TValue>. KeyCollection Keys { get ; } <li>Dictionary <TKey, TValue>. ValueCollection Values { get ; } <li>TValue this [TKey key] { get ; set ; } </ul>
    67. 67. Класс Dictionary<T,V> <ul> <li>void Add(TKey key, TValue value) <li>bool ContainsKey(TKey key) <li>bool ContainsValue(TValue value) <li>bool Remove(TKey key) <li>bool TryGetValue(TKey key, out TValue value) </ul>
    68. 68. Использование IEnumerator<KeyValuePair<T,V>> <ul> <li>IEnumerator < KeyValuePair < int , string >> ienum= idic.GetEnumerator(); <li>while (ienum.MoveNext()) <li>Console .WriteLine(ienum.Current.Key); </ul>
    69. 69. Использование foreach <ul> <li>foreach ( KeyValuePair < int , string > keyp in idic) <li>Console .WriteLine(ienum.Current.Key); </ul>
    70. 70. Конец Спасибо за внимание e-mail: a.bovanenko@gmail.com

    ×