prosdo.ru
добавить свой файл
1
Троелсен.

Отличия языка С# от С++.


  1. switch допускает выбор только одной ветви, каждая ветвь должна заканчиваться break

  2. цикл foreach позволяет последовательно обрабатывать элементы массива, не изменяя их значения. Foreach (тип элемента buffer in имя массива) { операторы цикла }. Может применяться к коллекциям.

  3. все массивы являются динамическими. Имя массива – указатель. Тип элемента [ ] имя массива; память выделяется с помощью операции new. Если многомерный массив то например int [ , ] x. при объявлении массива система генерирует новый класс, унаследованный от абстрактного класса Array и массив создается как объект этого нового класса. Компоненты класса Array доступны любому массиву. Методы и свойства класса Array:

    1. свойство Length (LongLenght) – возвращает количество элементов массива типа int (long int). Для многомерных – возвращает количество элементов по всем размерностям (общее количество)

    2. свойство Rank – возвращает размерность массива

    3. метод public static Array CreaterInstance (Type elementType, int length) позволяет создать массив во время выполнения программы, определяя тип элемента в момент создания массива. Тип элемента можно передать с помощью функции typeof (тип)

    4. метод SetValue ( ) – позволяет задать значения элементов массива

    5. метод GetValue ( ) – позволяет получить значение элемента массива

    6. методы Clone ( ) и Copy ( ) – позволяют сделать копию классов. Первый сам сделает новый массив, а второй копирует значения в другой

    7. метод Sort сортирует массив пузырьковым методом. Если элементы массива – объекты собственных классов, то необходимо реализовать метод CompareTo, обеспечивающий сравнение

    8. метод Clear ( ) – очищает элементы массива

    9. методы Contains ( ), IndexOf ( ) – выполняют линейный поиск, первый возвращает логическое значение, второй – индекс искомого элемента.


Операции.


  • Checked/unchecked – вкл/выкл проверку выхода значения за допустимый диапазон

  • Is – позволяет проверить совместим ли объект с заданным типом

  • As – применяется для явного преобразования типа объектов

  • Sizeof – определяет размер памяти в байтах

  • Typeof – возвращает объект типа.


Типы.

  • Decimal – 128-битные числа, имя – 28 знаков, диапазон: -1*10-28 – 7,9*1028

  • Bool – логический тип, true/false

  • String – строка символов

  • Object – базовый класс, от которого наследуются все внутренние и пользовательские классы.


Пространства имен.

Представляет собой способ организации логически взаимосвязанных классов и других типов. В С# принято каждый класс определять в отдельном файле. Пространство имен объединяет отдельные файлы в некоторую структуру с общей областью видимости. Синтаксис определения пространства имен:

namespace имя пространства

{ определение типов }

Полное имя типа определяется следующим образом: имя_пространства.имя_типа. Такое определение позволяет избежать двусмысленности в программном коде при совпадении имен типов, определенных в разных пространствах. Пространства имен допускают вложенность, в этом случае полное имя типа будет состоять из цепочки всех пространств имен, начиная сверху. Чтобы не переписывать в программе каждый раз полное имя достаточно в начале программы указать используемые пространства имен:

using имя_пространства. Для уникальных имен в этом случае в программе достаточно указать только имя типа.

Для длинных наименований пространств в предложении using можно назначить псевдоним: using псевдоним = имя_пространства. Этот псевдоним в дальнейшем используется в программном коде, с помощью операции области видимости: псевдоним :: имя типа.

Метод main. Выполнение программы в С# начинается с метода main ( ). Поэтому хотя бы один класс должен иметь статический метод main с типом результата void или int, с которого начинается выполнение программы.


Соглашения об именах в С#.

В С# каждое слово в имени принято писать с заглавной буквы. Для параметров функций и правил полей и членов классов используют «верблюжий» стиль – первая буква в имени пишется строчной, а далее каждое слово с большой буквы.

Классы.

Класс в С# – это ссылочный тип, размещенный в куче. Структура отличается от класса тем, что представляет собой значение, размещенное в стеке. Структура не поддерживает наследования.

Данные – члены класса – это поля, константы, события. Константы, объявленные в классе со словом const ассоциированы с классом. Константа рассматривается как переменная, значение которой не может быть изменено. Если значение константы заранее неизвестно, а в ходе выполнения изменяться не должно, то в этом случае можно использовать статическое поле «только для чтения»: readonly. Значение такого поля можно определить только в конструкторе. События позволяют определить, предусмотрена ли обработка того или иного события конкретным объектом и задать метод, обрабатывающий событие.

Методы.

В отличие от С++ спецификатор доступа должен быть указан у каждого метода, двоеточие не ставится. Все методы объявляются и реализуются внутри класса. Функций вне класса не существует. Параметры могут передаваться как о значению, так и по ссылке. По умолчанию параметры не ссылочного типа передаются по значению. Для передачи по ссылке используется ключевое слово ref, которое записывается и перед соответствующим фактическим параметром. Такой параметр инициализируется до передачи в метод. По ссылке передаются и так называемые выходные параметры, которые сопровождаются словом out. Такие параметры при передаче в метод автоматически инициализируются нулями.

Свойства – это наборы функций, определяющие правила доступа к private-полям.

public тип_свойства имя_свойства

{ get

{ return имя_поля; }

set

{ // код для установки значения поля


имя_поля = value; }}


Конструкторы.

Синтаксически конструктор ничем не отличается от С++. Допускается перегрузка конструкторов. Если в классе несколько конструкторов, то автоматический конструктор не будет сгенерирован. В С# конструктор может иметь любой статус доступа. Однако С# позволяет создавать статические конструкторы без параметров. Такой конструктор сопровождается спецификатором Static и необходим в том случае, если в классе определены статические поля или свойства. Статический конструктор из программного кода никогда не вызывается, вызов его производится автоматически до первого обращения к компоненту класса. У класса может быть только один статический конструктор, который имеет доступ только к статическим членам класса. Если статический конструктор в классе перегружен обычным конструктором без параметров, то компилятор будет различать их по спецификатору static.

Если при наличии нескольких конструкторов в классе один конструктор требует вызова другого конструктора, то используется следующий синтаксис: public имя_класса ([ список_параметров]): this ([ список_параметров])

{ операторы конструктора }

При вызове конструктора базового класса this заменяется на base. Из одного конструктора можно вызвать только один другой конструктор.
Финализаторы.

По сути это деструкторы в понимании языка С#. Синтаксис определения такой же, но финализаторы вызываются автоматически при удалении объекта из памяти, когда среда выполнения определит, что объект больше не нужен. Удаление объекта из памяти выполняет сборщик мусора.
Структуры.

Не относятся к ссылочным типам и не поддерживают наследования, хотя относятся к объектным типам. Для структуры всегда генерируется конструктор без параметров, который нельзя переопределить. Структура размещается в стеке. Задавать значения полей структуры при её определении нельзя. Структуры унаследованы от класса system.object.

Методы классов.


Виртуальные методы в производном классе перекрываются модификатором override. Обычные методы в производном классе перекрываются словом new. Абстрактные методы (чистые виртуальные функции) объявляются с ключевым словом abstract, который записывается после спецификаторов доступа. Класс, содержащий абстрактные методы, также объявляется с тем же словом. Закрытые классы и методы объявляются со словом sealed. От закрытого класса нельзя создать производный класс. Закрытый метод нельзя переопределить в производном классе.

Частичные классы. С# позволяет определять класс, структуру или интерфейс в нескольких файлах. В этом случае в определении класса непосредственно перед словом class следует записать слово partial. Компилятор соберет описание класса в единое целое автоматически.

Статические классы. Если класс содержит только статические компоненты, он может быть определен как статический с помощью слова static перед словом class. Это гарантирует, что к этому классу никогда не будут добавлены не статические члены, и объекты этого класса никогда не будут созданы. Для доступа к членам класса используется имя класса.
Использование управляющих элементов Windows Form.

Пример:

abstract class Figure

{

protected int x, y, sizex, sizey;

public int X

{ get {return x;}

Set {x=value;}

}

Public int Y

{ get {return y;}

Set {y=value;}}

Protected Form F;

Public int SizeX

{ get {return sizex;}

Set { if (value
sizex=value;

else sizex=F.width;

}}

Public int SizeY

{ get {return sizey;}

set {sizey=value;}}

public Figure (int x, int y, int sizex, int sizey)

{ X=x; Y=y; SizeX=sizex; SizeY=sizey; }