close

Вход

Забыли?

вход по аккаунту

?

8.Обобщенные типы, расширения, делегаты, лямбды, LINQ

код для вставкиСкачать
MVVM
Простая MVVM-архитектура
Архитектура сложного
корпоративного приложения
Generic-методы
static void Swap(ref int lhs, ref int rhs)
{
int temp;
temp = lhs;
lhs = rhs;
rhs = temp;
}
int a = 1;
int b = 2;
Swap(ref a, ref b);
static void Swap<T>(ref T lhs, ref T rhs)
{
T temp;
temp = lhs;
lhs = rhs;
rhs = temp;
}
int a = 1;
int b = 2;
Swap<int>(ref a, ref b);
void SwapIfGreater<T>(ref T lhs, ref T rhs)
where T : IComparable<T>
{
if (lhs.CompareTo(rhs) > 0)
{
T temp = lhs;
lhs = rhs;
rhs = temp;
}
}
Generic-классы
class Pair<T, U>
{
public T First { get; set; }
public U Second { get; set; }
}
var p = new Pair<string, int>
{
First = "abc",
Second = 10
};
Методы расширений
public static class IntExtensions
{
public static bool IsOdd(int x)
{
return x % 2 == 1;
}
}
var x = 5;
if (IntExtensions.IsOdd(x))
{
//...
}
6
public static class IntExtensions
{
public static bool IsOdd(this int x)
{
return x % 2 == 1;
}
}
var x = 5;
if (x.IsOdd())
{
//...
}
7
public static class StringExtensions
{
public static int WordsCount(this string str)
{
return str.Split(new char[] { ' ', '.', '?', '!' },
StringSplitOptions.RemoveEmptyEntries).Length;
}
}
string str = "qwe rt y";
int x = str.WordsCount();
8
Делегаты
Делегат — это указатель на функцию.
Делегат дает возможность одной функции вызывать другую, неизвестную заранее
(например, делегат на эту вызываемую функцию передается в вызывающую функцию как
параметр).
При описание делегата указывается ключевое слово delegate, его название
и сигнатура метода, на который делегат сможет ссылаться:
delegate void MyDelegate (string s);
Название делегата: MyDelegate
На какие методы он может ссылаться? На те, у которых тип возвращаемого
значения void и один формальный аргумент string.
9
Простой пример делегата
class DelegateExample
{
delegate int Operation(int a, int b);
static int Sum(int a, int b)
{
return a + b;
}
public static void Main()
{
Operation op = new Operation(Sum);
var result = op(1, 2);
}
}
10
Анонимные функции
class DelegateExample
{
delegate int Operation(int a, int b);
public static void Main()
{
Operation op = delegate(int a, int b)
{
return a + b;
};
var result = op(1, 2);
}
}
11
Лямбда-выражения
class DelegateExample
{
delegate int Operation(int a, int b);
public static void Main()
{
Operation op = (a, b) => a + b;
var result = op(1, 2);
}
}
12
public static class CollectionExtensions
{
public static void ForEach<T>(this IEnumerable<T> collection,
Action<T> action)
{
foreach (var item in collection)
{
action(item);
}
}
}
var array = new[] {1, 2, 3, 4, 5};
array.ForEach(x => Console.WriteLine(x));
Язык LINQ
using System.Linq;
var numbers = new[] { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var evensCount = numbers.Count(n => n % 2 == 0);
foreach (var item in numbers.Where(n => n % 2 == 0 && n < 5))
{
Console.WriteLine(item);
}
var fetch =
from n in numbers
where n < 5
select n;
14
public class Book
{
public string Title { get; set; }
public int
Pages { get; set; }
}
var books = new List<Book>
{
new Book {Title = "ВОЙНА И МИРЪ", Pages = 1274},
new Book {Title = "Люди доброй воли", Pages = 4959},
};
var sortByPages = books.OrderByDescending(x => x.Pages);
var firstBook = books.FirstOrDefault();
var secondBook = books
.Skip(1)
.Take(1);
15
var books = new List<Book>();
for (int i = 1; i <= 5; i++)
{
books.Add(new Book {Title = "Книга №" + i});
}
var books = Enumerable.Range(1, 5)
.Select(i => new Book {Title = "Книга №" + i});
16
var numbers = new[] {1, 3, 5, 7};
var str = string.Join(",", numbers);
События
Событие – это механизм C# для оповещения делегатов.
Издатель определяет момент срабатывания события, подписчики получают
оповещение.
У события может быть несколько подписчиков, но интерфейс подписки един.
Издатель
Подписчик
18
class Calculations
{
public delegate void PercentsHandler(int percent);
public event PercentsHandler PercentChange;
public List<ulong> FindSimples(ulong a, ulong b)
{
var result = new List<ulong>();
var percentStep = (b - a) / 100;
for (var n = a; n <= b; n++)
{
if (......) result.Add(n);
if ((n - a) % percentStep == 0 && PercentChange != null)
PercentChange((int)((n - a) / percentStep));
}
return result;
}
}
19
var calc = new Calculations();
calc.PercentChange += x => { Console.Write("\r{0}%", x); };
var nums = calc.FindSimples(1, 100000000);
20
Документ
Категория
Презентации
Просмотров
9
Размер файла
952 Кб
Теги
1/--страниц
Пожаловаться на содержимое документа