200 likes | 449 Views
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);.
E N D
MVVM Простая MVVM-архитектура Архитектура сложного корпоративного приложения
Generic-методы staticvoid Swap(refint lhs, refintrhs) { int temp; temp = lhs; lhs = rhs; rhs = temp; } int a = 1; int b = 2; Swap(ref a, ref b);
staticvoid 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);
voidSwapIfGreater<T>(ref T lhs, ref T rhs) where T : IComparable<T> { if (lhs.CompareTo(rhs) > 0) { T temp = lhs; lhs = rhs; rhs = temp; } }
Generic-классы classPair<T, U> { public T First { get; set; } public U Second { get; set; } } var p = newPair<string, int> { First = "abc", Second = 10 };
Методы расширений publicstaticclassIntExtensions { publicstaticboolIsOdd(int x) { return x % 2 == 1; } } var x = 5; if (IntExtensions.IsOdd(x)) { //... }
publicstaticclassIntExtensions { publicstaticboolIsOdd(this int x) { return x % 2 == 1; } } var x = 5; if (x.IsOdd()) { //... }
publicstaticclassStringExtensions { publicstaticint WordsCount(thisstring str) { return str.Split(newchar[] { ' ', '.', '?', '!' }, StringSplitOptions.RemoveEmptyEntries).Length; } } string str = "qwe rt y"; int x = str.WordsCount();
Делегаты Делегат — это указатель на функцию. Делегат дает возможность одной функции вызывать другую, неизвестную заранее (например, делегат на эту вызываемую функцию передается в вызывающую функцию как параметр). При описание делегата указывается ключевое слово delegate, его название и сигнатура метода, на который делегат сможет ссылаться: delegatevoid MyDelegate(string s); Название делегата: MyDelegate На какие методы он может ссылаться? На те, у которых тип возвращаемого значения voidи один формальный аргумент string.
Простой пример делегата classDelegateExample { delegateintOperation(int a, int b); staticint Sum(int a, int b) { return a + b; } publicstaticvoid Main() { Operation op = newOperation(Sum); var result = op(1, 2); } }
Анонимные функции classDelegateExample { delegateintOperation(int a, int b); publicstaticvoid Main() { Operation op = delegate(int a, int b) { return a + b; }; var result = op(1, 2); } }
Лямбда-выражения classDelegateExample { delegateintOperation(int a, int b); publicstaticvoid Main() { Operation op = (a, b) => a + b; var result = op(1, 2); } }
publicstaticclassCollectionExtensions { publicstaticvoidForEach<T>(thisIEnumerable<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 }; varevensCount = numbers.Count(n => n % 2 == 0); foreach (var item innumbers.Where(n => n % 2 == 0 && n < 5)) { Console.WriteLine(item); } var fetch = from n in numbers where n < 5 select n;
publicclassBook { publicstring Title { get; set; } publicintPages { get; set; } } var books = newList<Book> { newBook {Title = "ВОЙНА И МИРЪ", Pages = 1274}, newBook {Title = "Люди доброй воли", Pages = 4959}, }; varsortByPages = books.OrderByDescending(x => x.Pages); varfirstBook = books.FirstOrDefault(); varsecondBook = books .Skip(1) .Take(1);
var books = newList<Book>(); for (int i = 1; i <= 5; i++) { books.Add(newBook {Title = "Книга №" + i}); } var books = Enumerable.Range(1, 5) .Select(i => newBook {Title = "Книга №" + i});
var numbers = new[] {1, 3, 5, 7}; varstr = string.Join(",", numbers);
События Событие – это механизм C# для оповещения делегатов. Издатель определяет момент срабатывания события, подписчики получают оповещение. У события может быть несколько подписчиков, но интерфейс подписки един. Издатель Подписчик
classCalculations { publicdelegatevoidPercentsHandler(int percent); publiceventPercentsHandlerPercentChange; publicList<ulong> FindSimples(ulong a, ulong b) { var result = newList<ulong>(); varpercentStep = (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; } }
varcalc = newCalculations(); calc.PercentChange += x => { Console.Write("\r{0}%", x); }; varnums = calc.FindSimples(1, 100000000);