.NET Framework 2.0: новые возможности разработки

Download Report

Transcript .NET Framework 2.0: новые возможности разработки

.NET Framework 2.0: новые возможности разработки приложений с использованием языка программирования C#

Сергей Байдачный Технический директор ITG Ukraine, Beliron

Содержание

Новые возможности языка C# Обобщенные классы Частичные типы Анонимные методы Итераторы Другие возможности Новые возможности при создании Windows приложений Новые элементы управления Новые возможности при создании Web приложений Новые элементы Изменения в работе ASP.NET

Обобщенные типы Проблема Упаковка и распаковка

ArrayList list=new ArrayList(); list.Add(3); //

упаковка

Обобщенные типы Проблема Упаковка и распаковка Отсутствие проверки типов

ArrayList list=new ArrayList(); list.Add(3); //

упаковка

list.Add(“string”); //нет проверки

Обобщенные типы Проблема Упаковка и распаковка Отсутствие проверки типов Явное преобразование

ArrayList list=new ArrayList(); list.Add(3); //

упаковка

list.Add(“string”); //нет проверки ...

//

явное преобразование

int val=(int)list[0];

Обобщенные типы Вариант решения Проверка типов Повышение производительности Удобство

ArrayList list=new ArrayList(); list.Add(3); //

нет упаковки

list.Add(“string”); //ошибка компиляции ...

// отсутствие явного преобразование int val=list[0];

Обобщенные типы Реализация в C# Реализуются на уровне .NET Framework Конструируются CLR, а не компилятором Содержат информацию о параметрах в метаданных Применимы для ссылок и величин Используют единый машинный код для всех ссылочных типов Возможность динамического создания Идентичны при использовании в любых местах

Обобщенные классы Как это выглядит?

public class ArrayList { private ItemType[] _values; } public void Add(ItemType val) {…..} public ItemType this[int index] { get { return _values[index]; } set { _values[index]=value; } }

Обобщенные классы Использование Классы Структуры Интерфейсы Делегаты Методы

Обобщенные классы Классы и структуры Компактность Простота public class HashTable {…} public struct Point {…} HashTable table= new HashTable(); Point p=new Point();

Обобщенные классы Интерфейсы Возможность реализации класса от интерфейса с заданным типом Возможность реализации универсального класса

public interface IComparer { bool Compare(T objL,T objR); }

Обобщенные классы Делегаты Возможность использовать обобщенные типы

delegate void OnActiveHandler(object sender, T args); public class MyObject { OnActiveHandler OnActive; }

Обобщенные классы Методы Делаем универсальными нужные части Явное и неявное задание типа

public class GeneralComparer { } public static bool Compare(T objL,T objR) {…}

bool flag=GeneralComparer.Compare(5,7);

bool flag=GeneralComparer.Compare(5,7);

Обобщенные классы Ограничения Расширение возможностей Устранение ошибок на этапе выполнения

public class MyClass where T1: IComparable, new() where T2: MySecondClass { .....

}

Обобщенные классы Преобразования T.default

void Foo() { T x = null; T y = T.default; }

Проверка на Null Приведение типов

// Error // Ok void Foo(T x) { if (x == null) { throw new FooException(); } … } void Foo(T x) { int i = (int)x; // Error int j = (int)(object)x; // Ok }

Обобщенные классы Коллекции System.Collections.Generic

Классы и Интерфейсы

IList IDictionary ICollection IEnumerable IEnumerator IComparable IComparer LinkedList List Dictionary SortedDictionary Stack Queue

Частичные типы (Partial Types)

Частичные типы – один тип и много классов Идеальный способ для разделения кода и представления Удобство для разработчиков

Частичные типы

public partial class Customer { } private int id; public class Customer private string name; private string address; private List orders; private string address; private List orders; public partial class Customer { orders.Add(order); public void SubmitOrder(Order order) { } orders.Add(order); } } public bool HasOutstandingOrders() { return orders.Count > 0; public bool HasOutstandingOrders() { } }

Анонимные методы

Обработка событий без создания метода Использование локальных переменных

int count = 10; button1.Click += delegate(

object s, EventArgs a)

{ MessageBox.Show(count.ToString()); };

Анонимные методы

Обработка событий без создания метода Использование локальных переменных

int count = 10; button1.Click += delegate { MessageBox.Show(count.ToString()); };

Итераторы

foreach и интерфейсы IEnumerator, IEnumerable Создание качественного перечислителя – непростое дело Итератор – упрощает реализацию перечислителей

Итераторы

Реализация метода, возвращающего IEnumerator, IEnumerable, IEnumerator или IEnumerable yield return – возвращает текущее значение yield break – выход из метода } { public class List } public IEnumerator GetEnumerator() { for (int i = 0; i < count; i++) { yield return elements[i]; }

Инициализация делегатов

Еще меньше лишнего кода

button1.Click += Button1_Click; private void Button1_Click( object s,EventArgs args) { MessageBox.Show("Hello"); }

Обнуляемые типы

T? - аналог System.Nullable int? x = 123; double? y = 1.25; Преобразования к и из null int? x = null; double? y = null; Преобразования обнуляемых типов int i = 123; int? x = i; // int --> int?

double? y = x; int? z = (int?)y; // double? --> int?

int j = (int)z; // int? --> double?

// int? --> int

Статические классы

Содержат только статические элементы

static class Program { [STAThread] static void Main() { Application.EnableVisualStyles(); Application.EnableRTLMirroring(); Application.Run(new Form1()); } }

Управление предупреждениями

#pragma warning disable restore #pragma warning disable 0168 int i; #pragma warning restore 0168 int j;

Фиксированный буфер

Массивы заданного размера для взаимодействия с Win32 API

public struct OFSTRUCT { public byte cBytes; public byte fFixedDisk; public short nErrCode; private int Reserved1; private int Reserved2; public fixed char szPathName[128]; }

Видимость методов доступа

Возможность улучшения защиты для одного из методов доступа

public int Count { get { return count; } protected set { count = value; } }

WinForms – новые элементы

Улучшенный редактор Работа с маской ToolStrip, MenuStrip, StatusStrip, ContextMenuStrip Расположение элементов SplitContainer WebBrowser

Улучшенный редактор

Больше удобства при форматировании Поддержка Smart Tags

Работа с маской

ToolStrip, MenuStrip, StatusStrip, ContextMenuStrip Единый интерфейс (API) для панелей инструментов, меню, выпадающих меню и контекстных меню ToolStrip, MenuStrip, StatusStrip, ContextMenuStrip Элементы наследуют от ToolStripItem

Расположение компонентов SplitPanel Замена компонента Splitter Не использует Z-order Содержит splitter и две панели Вертикальное и горизонтальное расположение

Расположение компонентов FlowLayoutPanel Расположение в стиле HTML Автоматическое перераспределение дочерних компонентов Вертикальное и горизонтальное расположение Визуализация в режиме дизайна

Расположение компонентов TableLayoutPanel Табличное расположение в стиле HTML Объединение ячеек и колонок Различные варианты изменения размеров (absolute, percentage, autosizing) WYSIWYG-дизайнер

WebBrowser

ASP.NET – новые элементы

Работа с Master страницами Проверка ввода пользователя Некоторые простые элементы управления BulletedList FileUpload Panel Wizard Работа с пользователями И многое другое

Работа с Master страницами

Возможности и недостатки User Control Использование Master страниц для построения шаблонов Директива @Master <%@ Master Language="C#" %> Размещение содержимого

Проверка ввода пользователя

Проблемы в версии 1.х Объединение элементов в группы

Некоторые простые элементы

BulletedList FileUpload Panel Wizard

Работа с пользователями

Еще меньше работы Login LoginView PasswordRecovery LoginStatus LoginName CreateUserWizard ChangePassword

И многое другое

Навигация Работа с WebParts Новые элементы по работе с данными Модификация UI с помощью схем Поддержка профилей пользователя

ASP.NET – изменения в работе

Разделение кода и представления с помощью частичных типов Использование атрибута CompileWith

public partial class Default_aspx { }

<%@ Page Language="C#" CompileWith="Default.aspx.cs" ClassName="Default_aspx" %>

ASP.NET – изменения в работе

Из чего состоит проект - больше нет лишних файлов Компиляция в ASP.NET 2.0

поддержка специальных папок: App_code App_resources App_themes при первом доступе к странице возможность развертывания без исходных кодов

ASP.NET – изменения в работе

Использование разных языков

Вопросы

[email protected]

© 2004 Microsoft Corporation. All rights reserved.

This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.