Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Safonov / AMPN_course_19.pptx
Скачиваний:
140
Добавлен:
16.04.2015
Размер:
298.96 Кб
Скачать

типы

Целочисленные типы

byte, sbyte (8bit), short, ushort (16bit)

int, uint (32bit), long, ulong (64bit)IEEE-стандарт для вещественных типов

float (точность - 7 цифр)

double (точность - 15–16 цифр)Числовой тип расширенной точности:

decimal (точность - 28 десятичных цифр)Символьные типы:

char (один символ длиной 2 байта - UNICODE)

string (имеет большой набор операций; является ссылочным типом)

Булевский тип

bool (отдельный тип, не совместимый с int)

(C) Сафонов В.О. 2012

C#: перечисления

Именованные элементы; возможность явной нумерации отсутствует

Строгая типизация; отсутствует автоматическое

приведение к int

Лучше использовать Color.Blue, чем целочисленное

выражениеБолее прозрачное и легкое для сопровождения

Столь же простое, как int (имеет такое же

представление)

Базовый класс перечисления - System.Enum, который не является типом-перечислением; потомок

System.ValueType

Пример:

enum Color // : byte

{

Red,

Green,

Blue,

Yellow

};

(C) Сафонов В.О. 2012

C#: массивы

Элементы нумеруются начиная от 0; порядок элементов фиксирован

Строятся на базе класса .NET System.ArrayОбъявления: только тип и форма; границы не указываются (история: Algol 68 – “формальный описатель”)

int[] SingleDim;int[,] TwoDim;

int [][] ArrayOfArrays;

Создаются оператором new (указываются границы и инициализация)

SingleDim = new int[20];

TwoDim = new int[,]{{1,2,3},{4,5,6}};ArrayOfArrays = new int[1][];

ArrayOfArrays[0] = new int[]{1,2,3};

(C) Сафонов В.О. 2012

C#: пространства имен

Каждое определение должно принадлежать

некоторому пространству имен

Служат для разрешения конфликтов имен

Упорядочивают и систематизируют их

Обеспечивают лучшую понимаемость APIМогут и должны быть вложенными

Группируют классы и типы, в соответствии с их

семантикой

В объявлении указывается ключевое слово namespace namespace MyLectures

{ public class Lecture1 … }

При использовании указывается ключевое слово using: using MyLectures; … Lecture1 …

(C) Сафонов В.О. 2012

C#: Интерфейсы

Описание семантических соглашений (контрактов) между сторонами

Поддерживают компонентную ориентированность

и семантику (специфицируют поведение)Абстрактные определения методов и свойств (без их реализации)Поддерживают простое и множественное наследованиеПример:

interface IPersonAge

{

int YearOfBirth {get; set;} int GetAgeToday();

}

(C) Сафонов В.О. 2012

C#: Классы

Реализуют код и данные

Являются

 

семантическими

единицами

 

Реализуют интерфейсы

Наследуют от общего

базового класса

 

Содержат:

 

Поля: переменные-

элементы

 

Свойства:

 

обрабатываются парами

методов get/set

Методы:

 

функциональность

Особые элементы:

индексаторы, события,

делегаты

(C) Сафонов В.О. 2012

 

public class Person : IPersonAge

{

private int YOB;

public Person()

{

}

public int YearOfBirth

{

get { return YOB; }; set { YOB = value; };

}

public int GetAgeToday()

{

return Today()- YearOfBirth

};

}

C#: классы

(продолжение)

История: Концепция класса была впервые введена в языке Simula-67 (1967)

Сравните: C++ по своему происхождению по существу является гибридным языком, сочетающим синтаксис C и классы в стиле языка Simula

Сравните: Классы в Smalltalk намного более динамичны: набор элементов окончательно определяется во время выполнения. Это может быть полезно для специфических областей, например, для искусственного интеллекта, но менее эффективно

Сравните: Классы в Java, по сравнению с C#, не содержат индексаторов, делегатов и событий, - хотя идея использования пар методов getX / setX как единого “свойства” X взята из Java и используется в технологии Java Beans

C# 2.0: параметризованные типы и интерфейсы (generics); пошаговое определение классов (partial classes)

Важная новость: Sun приняла решение о реализации в Java 1.7 (синтаксиса) свойств в стиле C# (источник: Sun Tech Days, Санкт- Петербург, апрель 2007)

(C) Сафонов В.О. 2012

C# 2.0: пошаговое определение классов (partial classes)

Класс может быть определен по частям в нескольких файлах исходного кода (единицах компиляции) – это удобно для пошаговой разработки программ и быстрого внесения изменений // исходный файл 1

partial class C { }public void M() { … }

// исходный файл 2 partial class C { }public void N() { … }

Множество элементов пошагово определенного класса является объединением всех множеств его элементов, определенных в отдельных исходных файлах

(C) Сафонов В.О. 2012

C#: Структуры

Группируют данные с кодомАналогичны классам, но:

Отсутствует наследованиеЯвляются типами-значениями, в отличие от классов и

интерфейсовКлассы и структуры

Struct “Облегченные” контейнеры данных; типы- значения

Class Объекты; ссылочные типыВниманию программистов на C++ !

В C# структура - это НЕ “класс, в котором все поля и методы

– public”)

Сравните с подходом Б. Страуструпа в книге “Язык

программирования C++”)

Примерstruct: Point

{

double X; double Y;

void MoveBy(double dX, double dY) { X+=dX; Y+=dY; }

}

(C) Сафонов В.О. 2012

C#: структуры

(продолжение)

История: Структуры были предложены разработчиками языка PL/1 в фирме IBM (в середине 1960-х гг.)

История: В языке ALGOL-68 концепция структуры была

уточнена

История: В языке Pascal (1970) было введено аналогичное

понятие – записи (records)

В ранних языках структуры не содержали кода, а

состояли только из описаний данных

C++: структуры могут включать процедуры, а не только

данные (поля)

Сравните: Java не содержит структур, в ней есть только классы. По этой причине, чтобы определить на Java простейшую информационную структуру, такую как точка (X, Y), приходится определять новый класс с набором виртуальных (!) методов для обработки точек

(C) Сафонов В.О. 2012

C#: Свойства

Весьма полезный гибрид поля и методов: поле, доступ к которому и присваивание которому – программируемые операцииИстория: Популярной идеей 1970-х гг. было ПРОЦЕДУРНОЕ

ПРЕДСТАВЛЕНИЕ ДАННЫХ И ЗНАНИЙ. Свойства языка C# - удачная реализация данной идеи. Отметим, что значение свойства, если оно требуется, может вообще быть вычислено (либо найдено где-либо), а не храниться явно в объекте, которому оно принадлежитИспользуются для:

Реализации элементов данных, которые не могут быть изменены (для этого достаточно просто не включать метод set в описание свойства)

Проверок перед присваиванием (например, проверок полномочий)

РеализацииstringвычисляемыхName (активных) значенийПример: {

get { return name; } set { name = value; }

}

(C) Сафонов В.О. 2012

C#: Индексаторы

Способ определить контейнер как “абстрактный

массив”Основан на концепции свойства

Обеспечивает доступ к компонентам объекта по

индексам

Индексы могут быть любого типа (обычно – integer

или string)

История: в более ранних шароко известных языках

аналогов нетПример:

object this[string index]

{

get { return Dict.Item(index); } set { Dict.Add(index,value); }

}

(C) Сафонов В.О. 2012

C#: Делегаты

История: Концепция делегирования по-разному понимается в различных языках и моделях программирования; иногда “делегирование” означает “выборочное наследование реализаций”

Что именно делегируется делегатам .NET / C# ? Чаще всего – обработка события

Аналогичны указателям функций в C и C++

Очень важная особнность: делегаты строго типизированныОно задает типизированную сигнатуру, или заголовок, некоторого метода:

delegate void Clicked(Element e, Point p);

Фактический делегат является экземпляром данного типа:

Clicked MyClickHandler

=new Clicked(obj.OnButtonClick);

Аргумент передается конструктору делегата

Ссылки на объект и на метод

Метод должен иметь ту же сигнатуру

void OnButtonClick(Element e, Point p)

{... };

(C)Сафонов В.О. 2012

C#: События

История: Известно несколько распространенных моделей событий: в X Window, Turbo Vision, Java и др.Сравните: В Java события обрабатываются слушателями событий, но эта возможность не является частью языка, я является лишь элементом (соглашением) технологии Java Beans

C#: Модель событий встроена в язык

Управление событиями полностью реализовано в C#При описании событий используются типы-делегатыОбъявление создает источник событий для связывания:

event Clicked OnClicked;

Событие связано с его источником с помощью делегатовДобавление обработчика события:

btnAction.OnClicked += MyClickHandler;

Удаление обработчика события:

btnAction.OnClicked -= MyClickHandler;

Источник события использует метод-делегат:

OnClicked(this,PointerLocation);

(C) Сафонов В.О. 2012

C#: Атрибуты

Аналогичны атрибутам в IDL (в модели CORBA)

Нет аналогов в Java (но в Java 1.5 введены

аннотации!)

Декларативный доступ к функциональностиРасширяемость: пользовательские (custom) атрибутыДопускают добавление кода:

[Transaction(TransactionOption.Required)]

Аннотации времени выполнения

class MyBusinessComponent :ServicedComponent { ... }

[PersonFirstName] String Vorname;

[PersonFirstName]ДекларативнаяStringсемантикаPrimarioNome;

(C) Сафонов В.О. 2012

Соседние файлы в папке Safonov