Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции по C#(первая часть, версия 2.2)

.pdf
Скачиваний:
208
Добавлен:
23.02.2015
Размер:
1.39 Mб
Скачать

УГТУ-УПИ Кафедра Автоматизированные электрические системы

КУРС ЛЕКЦИЙ по C#

Часть первая:

встроенные возможности, массивы, строки, структуры

Котов О.М.

Редакция 2.2

Екатеринбург 2011

1

Введение

Содержание

4

 

2 Первая программа на C#..............................................................................................

6

 

2.1

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

 

7

3 Общая характеристика и вспомогательные элементы языка.....................................

7

 

3.1

Ключевые слова...........................................................................................................................

 

8

 

3.2

Разделители..................................................................................................................................

 

8

 

3.3

Комментарии ...............................................................................................................................

 

8

 

3.4

Идентификаторы..........................................................................................................................

 

9

4 Объекты данных и базовые средства их обработки ...................................................

9

 

4.1

Иерархия встроенных типов в C#...............................................................................................

9

 

4.2

Константы..................................................................................................................................

 

10

 

4.2.1

Литералы (простые константы) .........................................................................................

10

 

4.2.2

Символические константы.................................................................................................

15

 

4.2.3

Перечисления......................................................................................................................

 

15

 

4.3

Скалярные объекты встроенных типов данных.......................................................................

15

 

4.3.1

Тип float ..............................................................................................................................

 

19

 

4.3.2

Тип decimal .........................................................................................................................

 

20

 

4.4

Выражения и операции..............................................................................................................

21

 

4.4.1

Битовые операции ..............................................................................................................

24

 

4.4.2

Операции сдвига.................................................................................................................

 

25

 

4.4.3

Арифметические операции:...............................................................................................

26

 

4.4.4

Преобразование типов........................................................................................................

27

 

4.4.5

Особый порядок выполнения операций замещения.........................................................

29

 

4.4.6

Логические операции и операции отношения...................................................................

30

 

4.4.7

Операции инкремента и декремента..................................................................................

31

 

4.4.8

Объявление и использование символических констант...................................................

31

 

4.4.9

Объявление и использование перечислимых констант....................................................

32

 

4.4.10

Операция выбора................................................................................................................

 

32

 

4.4.11

Операция присваивания.....................................................................................................

35

 

4.5

Операторы управления..............................................................................................................

35

 

4.5.1

Типы вычислительных процессов .....................................................................................

35

 

4.5.2

Операторы выбора..............................................................................................................

37

 

4.5.3

Оператор выбора if.............................................................................................................

37

 

4.5.4

Оператор выбора if-else......................................................................................................

38

 

4.5.5

Оператор выбора if-else-if...................................................................................................

38

 

4.5.6

Блочный оператор ..............................................................................................................

40

 

4.5.7

Оператор множественного выбора switch .........................................................................

40

 

4.5.8

Операторы циклов..............................................................................................................

43

 

4.5.9

Оператор цикла while .........................................................................................................

44

 

4.5.10

Оператор цикла

do while..................................................................................................

45

 

4.5.11

Оператор цикла

for..........................................................................................................

46

 

4.5.12

Операторы goto, break и continue в циклах.......................................................................

47

 

4.5.13

Вложенные циклы..............................................................................................................

49

 

4.6

Массивы.....................................................................................................................................

 

50

 

4.6.1

Одномерные массивы.........................................................................................................

50

 

4.6.2

Оператор цикла foreach.....................................................................................................

52

 

4.6.3

Простейшие приёмы работы с одномерными массивами.................................................

53

 

4.6.4

Двумерные массивы...........................................................................................................

60

 

4.6.5

Двумерные ломаные (ступенчатые, зубчатые) массивы................................................

65

5

Методы (подпрограммы)............................................................................................

67

2

 

5.1

Типы и аргументы методов.......................................................................................................

68

 

5.2

Модификаторы ref и out ............................................................................................................

69

 

5.3

Массив в качестве входного аргумента....................................................................................

71

 

5.4

Модификатор params.................................................................................................................

72

 

5.5

Перегрузка методов...................................................................................................................

73

 

5.6

Рекурсивные методы.................................................................................................................

73

6

Строки.........................................................................................................................

75

 

6.1

Объявление строк......................................................................................................................

75

 

6.2

Операции и методы для работы со строками...........................................................................

77

 

6.3

Массивы строк...........................................................................................................................

79

7

Структуры...................................................................................................................

81

 

7.1

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

83

 

7.2

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

84

 

7.3

Неособые методы ......................................................................................................................

85

 

7.4

Переопределение методов.........................................................................................................

85

 

7.5

Операции для пользовательских типов ....................................................................................

87

 

7.6

Свойства.....................................................................................................................................

88

8 Методы и алгоритмы численного интегрирования ..................................................

89

 

8.1

Постановка задачи.....................................................................................................................

89

 

8.2

Программная реализация численного интегрирования...........................................................

93

9

Приложение 1 .............................................................................................................

96

3

1 Введение

Как известно, языки программирования служат одной цели – написанию исходного кода программ. По степени «близости» аппаратной части языки программирования делятся на низкоуровневые (машинно-ориентированные) и высокоуровневые. В свою очередь, языки высокого уровня различаются на структурные (процедурно-ориентированные) и объектно-ориентированные. В первом случае концепция программирования может быть определена, как набор функций (центральный элемент системы), обрабатывающих данные. В объектноориентированных языках центральное место отведено данным, а выполнение функций так или иначе организовано вокруг этих данных. Типичным представителем процедурных языков считается язык Си, объектно-ориентированных – Си++. Последний до недавних пор оставался одним из наиболее универсальных для решения широкого круга задач. При этом использование Си++ в конкретных инструментальных системах (например, Builder) и для конкретного вида приложений (например, сетевых приложений) требовало соответствующих добавлений (расширений) языка и в ряде случаев приводило к созданию своего рода диалектов, где базовые конструкции оказывались зачастую не всегда различимым фоном.

Как это часто бывает в истории, когда «вес» количественных изменений превысил некоторый суммарный порог, появился новый язык программирования С# (произноситься, как си шарп, хотя разработчики предполагали названием си-диез), вобравший в себя значимые черты своих предшественников и в большей степени отвечающий современным потребностям.

Руководителем группы разработчиков языка С# является Андерс Хейлсберг,

сотрудник компании Microsoft (ранее входил в группу разработчиков инструментальной системы Builder). Цели, которые преследовались созданием этого языка были сформулированы им следующим образом:

создать объектно-ориентированный язык, в котором любая сущность представляется объектом;

создать первый компонентно-ориентированный язык программирования семейства C/C++;

упростить C++, сохранив его мощь и основные конструкции.

повысить надёжность программного кода.

Компонентами называются объекты специальных типов, позволяющие эффективно разрабатывать модульные оконные приложения. Построение компонентов обычно определяется не только языком, но и платформой, на которой этот язык реализован. Язык С# разработан для платформы .NET (произносится, как «дот-нет»), которая в свою очередь является средой, открытой для свободного включения новых языков, создаваемых не только Microsoft, но и (потенциально) другими фирмами. Проще говоря, .NET объединяет набор программных технологий, ориентированных, прежде всего, на разработку Web и Windows приложений (отсюда и название).

Среда .NET содержит такие основные составляющие, как CLR (Common Language Runtime) – общеязыковую среду исполнения:

4

ядро (набор служб, управляющих загрузкой приложения в память,

собраны в mscoree.dll);

библиотека базовых классов (главная сборка в mscorlib.dll);

Всоставе этой библиотеки выделяется CTS (Common Type System) – общая система типов и подмножество этой системы CLS (Common Language Specification) –

общеязыковую спецификацию (содержит типы данных, которые гарантированно поддерживаются во всех языках .NET),

Процесс создания приложения на C# в среде .NET представляет следующую последовательность этапов:

*.cs - файл

Исходный код на C#

 

С# - транслятор

 

Управляемый,

*.exe - файл

платформеннонезависимый

(сборка)

(промежуточный) код на языке IL

( intermedia language)

 

JIT (just in time) - компилятор времени выполнения

Машинный платформеннозависимый код, исполняющийся в среде CLR

Загружается

непосредственно в оперативную память

Наряду с языком C# в среде NET в соответствии с указанной технологией могут быть использованы такие языки, как C++, VB.NET, VisualBasic, Jscript, J# и т.д. (всего более 30 языков).

Язык С# можно считать непосредственным преемником языка С++. С другой стороны, не могут быть незамеченными в его составе и многие черты такого языка,

как Java.

Задачей второй части дисциплины «Информатика» (и, соответственно, первой части изучения настоящего программирования) является изучение и практическое освоение части языка С#, не связанной с глубоким использованием объектного и компонентного программирования. Завершение изучения языка будет осуществлено уже в рамках дисциплины «Современные языки программирования» в следующем семестре.

5

2 Первая программа на C#

class FirstProgram

{

static void Main()

{

System.Console.WriteLine("Здравствуй, Мир!");

}

}

На экране (режим запуска «Start without Debugging» - запуск без отладчика):

Комментарий к тексту «первой программы»

Слово class, расположенное в первой строке, относится к объектноориентированной части языка и разговор об этом будет отдельный. Для начала можно отметить, что class – это способ описания конструкции объекта. Элементами класса могут быть :

поля - именованные области памяти для размещения данных;

методы - фрагменты кода, выполняющие некоторое действие;

свойства и операции – упрощенные или специализированные вариации методов;

события – специальные ссылки для т.н. обратного вызова методов.

Слово class должно присутствовать, хотя бы один раз, в любой программе на C#. Здесь, несомненно, проявляется заимствование из языка Java: даже главная (Main) программа должна принадлежать классу и поэтому называется методом. В данном случае имя класса FirstProgram, а программа Main - часть этой конструкции. Имя после class произвольное.

Во второй строке слово static объявляет метод Main статическим, что определяет возможность запуска на выполнения без каких - либо предварительных условий (а именно: без предварительного создания объекта класса). Фраза void Main() является заголовком метода Main: объявляет пустой возвращаемый тип (void) и пустой «()» список входных параметров. Следующий далее блок фигурных скобок ограничивает «тело» метода Main, состоящий из одного оператора – вызова функции (правильнее сказать – метода) WriteLine с входным аргументом - строкой "Здравствуй, Мир!". Можно отметить, что аргументы метода всегда помещаются внутри круглых (обычных) скобок. Заканчивается оператор символом «;», являющимся обязательным ограничителем большинства конструкций С#. Приписка перед именем функции System.Console. указывает, что функция WriteLine является методом класса Console (тоже статическим), который, в свою очередь, относится к категории системных (System – корневое пространство имён).

Имя главной программы Main не может быть изменено, так как система именно с этой программы начинает выполнение любой программной системы (т.н. точка входа).

6

Если использовать оператор using , определяющий пространство имён System, оператор вызова функции WriteLine несколько упрощается:

using System; class FirstProgram

{

static void Main()

{

Console.WriteLine("Здравствуй, Мир!");

}

}

2.1 Пространства имён

Как уже отмечалось, программирование на C# основано на системе (библиотеке) типов CTS. Эта библиотека насчитывает более 4000 различных типов, которые для удобства работы объединены в функциональные группы – пространства имён. Группы, в свою очередь, представляют собой иерархическую древовидную систему. Часть этой системы представлена на схеме:

System

Корневое пространство имён

Контейнерные

 

 

 

Collection

классы

 

 

 

 

 

 

Windows

Классы для работы с

 

 

элементами интерфейса

 

 

 

 

 

 

Windows

 

 

Drawing

Классы для работы с графическими

 

примитивами

 

 

 

 

IO

Классы, отвечающие за операции ввода

 

- вывода

 

 

 

 

 

 

 

На первом этапе освоения C# будет использовано только пространство имён

System.

3 Общая характеристика и вспомогательные элементы языка

Алфавит (множество литер) языка программирования С# составляют символы:

строчные и прописные буквы латинского алфавита;

цифры от 0 до 9;

символ подчеркивания ‘_’;

набор специальных символов: " ( ) { } | [ ] + - % / \; ' : ? < > = ! & # ~ *

прочие символы.

7

В свою очередь, алфавит С# служит для построения слов, которые называются лексемами. Различают пять типов лексем:

ключевые слова;

разделители.

идентификаторы;

константы;

знаки (символы) операций;

3.1Ключевые слова

Всоставе языка C# ровно 77 ключевых слов, из которых в текущем семестре освоены будут примерно половина (подчёркнуты):

abstract

false

params

this

as

finally

private

throw

base

fixed

protected

true

bool

float

public

try

break

for

readonly

typeof

byte

foreach

ref

uint

case

goto

return

ulong

catch

if

sbyte

unchecked

char

implicit

sealed

unsafe

checked

in

short

ushort

class

int

sizeof

using

const

interface

stackalloc

virtual

continue

internal

static

void

decimal

is

string

volatile

default

lock

struct

while

delegate

long

switch

 

do

namespace

operator

 

double

new

out

 

else

null

override

 

enum

object

 

 

event

 

 

 

explicit

 

 

 

extern

 

 

 

3.2 Разделители

Лексемы языка имеют собственные правила словообразования (синтаксис) и обособляются разделителями:

скобки ( ) { } [ ],

пробел,

табуляция,

символ новой строки,

комментарии.

Осимволах табуляции и новой строки речь пойдёт в разделе о литералах.

3.3Комментарии

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

8

парный комментарий - /* комментарий */;

строчный комментарий - // комментарий заканчивается в конце данной строки;

xml – комментарий для создания самодокументируемых программ(///);

3.4 Идентификаторы

Идентификаторами называются имена, которые назначает программист. Именуются объекты, классы, структуры, методы, метки и т.п. Правило написания идентификаторов достаточно простое:

состоит из одного или более символов. Обычно даётся осмысленное, отражающее назначение элемента имя;

идентификатор не может совпадать с ключевым словом. Точнее сказать, может – но с точностью до @ (например, @else, @for, @case – допустимые идентификаторы);

размер идентификатора не ограничен;

первый символ – обязательно буква. Хорошую читабельность придают знаки нижнего подчёркивания внутри имени (например, my_firstr_variable) или использование прописных букв (MyFirstrVariable);

в идентификаторах можно (!) использовать русские буквы (например,

моя_первая_переменная или МояПерваяПеременная);

4 Объекты данных и базовые средства их обработки

4.1 Иерархия встроенных типов в C#

Все объекты данных в C# являются производными от системного «супербазового» типа Object (или object):

Object

GetType()

 

 

 

 

ToString()

методы

 

 

 

 

 

 

 

 

 

 

Value Type

String

Array

Type

- значащие типы

 

 

 

 

MaxValue

MinValue статические

поля

встроенные типы

структурные типы

Enum

SByte, Byte, Char, Int16,UInt16,…

 

Небольшое пояснение, связанное с типом Type. Любая программа .NET организуется в виде самоописательной (и самодостаточной) сущности - сборки (assembly). Сборка состоит из одного или нескольких модулей в виде IL – кода, а

9

также необходимых описаний для использования этого кода. Эти описания называются метаданными. Для работы с подобными описаниями как раз и разработан специальный тип Type. Он позволяет получить информацию о конструкторах, методах, полях, свойствах и событиях класса, а так же о том, в каком модуле и сборке развернут соответствующий тип.

4.2 Константы

Константами называются объекты данных, которые не изменяют своего значения на всём времени выполнения программы. Константы в С# бывают трёх типов :

литералы (или простые константы); символические константы; перечислимые константы.

4.2.1 Литералы (простые константы)

Литералов насчитывается четыре типа:

целочисленный литерал;

вещественный литерал;

символьный литерал;

строковый литерал.

Целочисленный литерал (или целочисленная константа) служит для записи целых значений и является соответствующей последовательностью цифр. Эта последовательность может предваряться знаком '-', в данном случае являющейся операцией смены знака. Целочисленный литерал, начинающийся с или 0X, воспринимается как шестнадцатеричное целое. В этом случае целочисленный литерал может включать символы от А или а, до F или f. В зависимости от значения целочисленный литерал размещается последовательно в одном из следующих форматов (по мере увеличения значения) :

целочисленный знаковый размером 4 байта;

целочисленный беззнаковый размером 4 байта;

целочисленный знаковый размером 8 байт;

целочисленный беззнаковый размером 8 байт;

Непосредственно за константой могут располагаться в произвольном сочетании один или два специальных суффикса: U (или u) и L (или l). При этом суффикс U (или u) регламентирует использование беззнакового формата, а L (или l) использование формата удвоенного размера – 8 байт.

Вещественный литерал служит для задания вещественных значений. Он представляет собой запись соответствующего значения в десятичной системе в том числе, в экспоненциальной форме, когда мантисса отделена от порядка символом Е (или е). Размещается вещественный литерал в 8-байтовом плавающем формате (соответствует плавающему типу с удвоенной точностью - double). Непосредственно за вещественным литералом может располагаться один из двух специальных суффиксов: F (или f) для создания 4-х байтовой константы плавающего типа (float).

10