Разделы презентаций


Обобщенные типы

Обобщенные методыstatic int indexOf(char[] m, char k){ for (int i = 0; i < m.Length; i++) if (m[i] == k) return i;

Слайды и текст этой презентации

Слайд 1Обобщенные типы

Обобщенные типы

Слайд 2Обобщенные методы
static int indexOf(char[] m, char k)
{
for (int

i = 0; i < m.Length; i++)

if (m[i] == k)
return i;
return -1;
}

static int indexOf(T[] m, T k)
{
for (int i = 0; i < m.Length; i++)
if (m[i].Equals(k))
return i;
return -1;
}

Чтобы написать обобщенный метод, сначала нужно написать обычный, а потом заменить конкретный тип параметром.

int n = indexOf(list, 35);

int n = indexOf(list, 35);

Вывод типа – при вызове обобщенного метода компилятор может сам конкретизировать тип.

Обобщенные методыstatic int indexOf(char[] m, char k){  for (int i = 0; i < m.Length; i++)

Слайд 3Ограничения параметрического типа
where T: struct
where T: class
where T: InterfaceName
where T:

ClassName
where T: new()
static int indexOf(L m, T k)

where L: IList
{
for (int i = 0; i < m.Count; i++)
if (m[i].Equals(k))
return i;
return -1;
}

Специфика параметров должна быть описана в ограничениях (ключевое слово where)

Форма ограничений

Ограничения параметрического типаwhere T: structwhere T: classwhere T: InterfaceNamewhere T: ClassNamewhere T: new() static int indexOf(L m,

Слайд 4Обобщенные классы
public class Rect
{


public T Width { set;

get; }
public T Height { set; get; }

public double Square()
{
return Convert.ToDouble(Width) *
Convert.ToDouble(Height);
}
}

Rect sq = new Rect { Width = 4f, Height = 5f };

var s = sq.Square();

Иным способом умножение объектов типа Т можно организовать при помощи интерфейса с методом умножения.

Работа с классом Rect

Обобщенные типы придуманы для типизации коллекций.

Обобщенные классы  public class Rect  {        public T

Слайд 5Пространство System.Collections .Generic
List
Dictionary
SortedDictionary
IEnumerable
IEnumerator
ICollection

Размер, перечисление , потокобезопасность

IList

Добавление, удаление и индексация
IDictionary
ISet

IComparer

SortedSet
LinkedList
Stack
Queue


Интерфейсы

Классы

Пространство  System.Collections .Generic List DictionarySortedDictionary IEnumerable IEnumerator ICollection   Размер, перечисление , потокобезопасность  IList

Слайд 6Коллекция List
class Point
{
public int X, Y;
}
List

l = new List
{

new Point { X = 3, Y = 3 },
new Point { X = 2, Y = 4 },
};

l.Sort();

foreach (var p in l)
Console.WriteLine(p.X);

Сокращенный синтаксис инициализации коллекции

Коллекция Listclass Point{  public int X, Y;}  List l = new List   {

Слайд 7Естественный порядок в коллекции
class Point: IComparable
{
public int X,

Y;

public int CompareTo(object obj)
{

Point p = (Point)obj;
return X - p.X;
}
}

Естественный порядок элементов определяется тем, что элемент реализует интерфейс IComparable или IComparable .

class Point : IComparable
{
public int X, Y;
public int CompareTo(Point p)
{
return X - p.X;
}
}

Естественный порядок в коллекцииclass Point: IComparable{  public int X, Y;  public int CompareTo(object obj)

Слайд 8Навязанный порядок в коллекции
class PointComparator : IComparer
{
public int

Compare(Point a, Point b)
{
return

a.X - b.X;
}
}

Навязанный порядок задается при помощи объекта с интерфейсом IComparer.

list.Sort(new PointComparator());

Сортировка с компаратором:

Навязанный порядок в коллекцииclass PointComparator : IComparer{  public int Compare(Point a, Point b)  {

Слайд 9Ковариантность
class Program
{
static void Main()

{
B[]

b = new D[10]; // 1.0
IEnumerable bb = new List(); // 3.5
IEnumerable bb = new List(); // 4.0
}
}

В интерфейсе IEnumerable тип T находится только на выходных позициях.

public interface IEnumerable : IEnumerable
{
IEnumerator GetEnumerator();
}

class B { }
class D : B { }

Ковариантностьclass Program  {    static void Main()    {

Слайд 10Контравариантность
class MyComparer : IComparer
{

public int Compare(T x, T y)

{
return ...;
}
}

class Program
{
static void Main()
{
IComparer cd = new MyComparer(); // 3.5
IComparer cd = new MyComparer(); // 4.0
}
}

В интерфейсе IComparable тип T находится только на входных позициях (in).

public interface IComparer

class B { }
class D : B { }

Контравариантность  class MyComparer : IComparer  {    public int Compare(T x, T y)

Слайд 11Почему «ко» и «контра»

D B
IEnumerable IEnumerable

D B
IComparer IComparer





Стрелки совпадают – ковариантность.
Стрелки навстречу – контравариантность.

Ко- и контравариантность возможна, только если параметр – ссылочный тип.

Ко- и контравариантность возможна только для обобщенных интерфейсов и обобщенных делегатов.

Обозначим безопасные преобразования типов стрелками.

Почему «ко» и «контра»        D   BIEnumerable  IEnumerable

Слайд 12Самостоятельно
Объявить статический метод Freq(), который получает текст и возвращает частотный

словарь текста. Слова в тексте разделены произвольным количеством пробелов.

Задан список.

Оставить в нем только уникальные элементы. Для этого объявить статический метод void Unique(), который получает обобщенный список и убирает из него все вхождения элемента, кроме первого.

Объявить обобщенный класс Runner, объект которого можно проходить в цикле foreach. Класс должен иметь конструктор с переменным числом параметров типа T. Эти значения, переданные конструктору, и должны перечисляться в цикле foreach.

СамостоятельноОбъявить статический метод Freq(), который получает текст и возвращает частотный словарь текста. Слова в тексте разделены произвольным

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика