On-line: гостей 0. Всего: 0 [подробнее..]
Форум закрывается и забрасывается в связи с переходом на другой, более презентабельный.ФИЛу было хорошо, но он не выжил.RIP.

АвторСообщение
moderator




Сообщение: 2
Зарегистрирован: 09.11.09
Репутация: 0
ссылка на сообщение  Отправлено: 09.11.09 18:04. Заголовок: Уроки C#


Урок 1


Введение в C Sharp и .Net


C# (произносится Си-Шарп) - это новый язык программирования от компании Microsoft. Он входит в новую версию Visual Studio - Visual Studio.NET. Кроме C# в Visual Studio.NET входят Visual Basic.NET и Visual C++.
Одна из причин разработки нового языка компанией Microsoft - это создание компонентно-ориентированного языка для новой платформы .NET. Другие языки были созданы до появления платформы .NET, язык же C# создавался специально под эту платформу и не несет с собой груза совместимости с предыдущими версиями языков. Хотя это не означает, что для новой платформы это единственный язык.
Еще одна из причин разработки компанией Microsoft нового языка программирования - это создание альтернативы языку Java. Как известно, реализация Java у Microsoft не была лицензионно чистой - Microsoft в присущей ей манере внесла в свою реализацию много чего от себя. Компания Sun, владелица Java, подала на Microsoft в суд, и Microsoft этот суд проиграла. Тогда Microsoft решила вообще отказаться от Java, и создать свой Java-подобный язык, который и получил название C#.

Если перевести слова NET Runtime на русский язык, то мы получим что-то вроде «Среда выполнения». Именно вы этой среде и выполняется код, получаемый в результате компиляции программы написанной на C#. NET Runtime основын не на ассемблере (т. е. не на коде, родном для процессора), а на некотором промежуточном коде. Отдаленно он напоминает виртуальную Java машину. Только если в случае Java у нас был только один язык для виртуальной машины, то для NET Runtime таких языков может быть несколько. Теоретически программа для среды NET Runtime может выполняться под любой операционной системой, в которой NET Runtime установлена. Но на практике пока единственная платформа для этого - это Windows.


Основные понятия

Assembly (Сборка) – базовый строительный блок приложения в .NET Framework. Управляемые модули объединяются в сборки. Сборка является логической группировкой одного или нескольких управляемых модулей или файлов ресурсов. Управляемые модули в составе сборок исполняются в Среде Времени Выполнения (CLR). Сборка может быть либо исполняемым приложением (при этом она размещается в файле с расширением .exe), либо библиотечным модулем (в файле с расширением .dll). При этом ничего общего с обычными (старого образца!) исполняемыми приложениями и библиотечными модулями сборка не имеет.
Managed Code (Управляемый код) – это код, который выполняется в среде CLR. Код строится на основе объявляемых в исходном модуле структур и классов, содержащих объявления методов. Управляемому коду должен соответствовать определенный уровень информации (метаданных) для среды выполнения. Код C#, Visual Basic, и JScript является управляемым по умолчанию. Код Visual C++ не является управляемым по умолчанию, но компилятор может создавать управляемый код, для этого нужно указать аргумент в командной строке(/CLR). Одной из особенностей управляемого кода является наличие механизмов, которые позволяют работать с управляемыми данными.
Managed Data (Управляемые данные) – объекты, которые в ходе выполнения кода модуля размещаются в управляемой памяти (в управляемой куче) и уничтожаются сборщиком мусора CLR. Данные C#, Visual Basic и JScript .NET являются управляемыми по умолчанию. Данные C# также могут быть помечены как неуправляемые.
GAC (Global Assembly Cache – Общий КЭШ сборок). Для выполнения .NET-приложения достаточно разместить относящиеся к данному приложению сборки в одном каталоге. Если при этом сборка может быть использована в нескольких приложениях, то она размещается и регистрируется с помощью специальной утилиты в GAC.
CTS – Common Type System (Общая Система Типов). Поддерживается всеми языками платформы. В силу того, что .NET основана на парадигме ООП, речь здесь идет об элементарных типах, классах, структурах, интерфейсах, делегатах и перечислениях. Common Type System является важной частью среды выполнения, определяет структуру синтаксических конструкций, способы объявления, использования и применения общих типов среды выполнения. В CTS сосредоточена основная информация о системе общих предопределенных типов, об их использовании и управлении (правилах преобразования значений). CTS играет важную роль в деле интеграции разноязыких управляемых приложений.
Namespace - Пространство имен – это способ организации системы типов в единую группу. В рамках .NET существует единая (общеязыковая) библиотека базовых классов. Концепция пространства имен обеспечивает эффективную организацию и навигацию по этой библиотеке. Вне зависимости от языка программирования, доступ к определенным классам обеспечивается за счет их группировки в рамках общих пространств имен.

NET Runtime состоит из нескольких частей. Одна из них - это Common Language Runtime. Это, говоря кратко, это некоторый набор стандартов, котрые должны поддерживать все языки платформы .NET. Например, в предыдущих версиях Visual Studio была такая проблема, что разные языки по разному хранили данные одного по идее типа. Так, скажем, тип целого в Visual Basic'е занимал два байта, а в Visual C++ - четыре. А это порождало кучу проблем при совместном использовании языков. Так вот, Common Language Runtime как раз в частности и определяет стандартные для все языков .NET типы данных. И уже есть гарантии, что целый тип в одном языке будет в точности соответствовать одноименному типу в другом.
Структура среды выполнения CLR (основные функциональные элементы среды) представлена на рисунке.
Строгий контроль типов, в частности, предполагает проверку соответствия типа объекта диапазону значений, которые могут быть присвоены данному объекту.
Защита .NET (безопасность) строится поверх системы защиты операционной системы компьютера. Она не дает пользователю или коду делать то, что делать не позволено, и накладывает ограничения на выполнение кода. Например, можно запретить доступ некоторым секциям кода к определенным файлам.
Функциональные блоки CLR Code Manager и Garbage Collector работают совместно: Code Manager обеспечивает размещение объектов в управляемой памяти, Garbage Collector – освобождает управляемую память.
Exception Manager включает следующие компоненты:


* finally handler (обеспечивает передачу управления в блок finally);
* fault handler (включается при возникновении исключения);
* type-filtered handler (обеспечивает выполнение кода соответствующего блока обработки исключения);
* user-filtered handler (выбор альтернативного блока исключения).


Ниже представлена схема выполнения .NET-приложения в среде CLR.




Еще одна важная часть NET Runtime - это набор базовых классов. Их очень много (порядка несколько тысяч). Кроме того, эти классы относятся не к конкретному языку, а к NET Runtime. Т. е. мы получаем набор классов, общий для всех языков .NET, что достаточно удобно.
На данный момент последняя версия Visual Studio.NET 2008.
Все уроки будут выполнятся в среде Microsoft Visual Studio, но это не значит что нельзя будет использовать какую либо другую из известных сред. Если у Вас нет среды VS.NET, с сайта производителя можно скачать бесплатную редакцию среды разработки.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 4 [только новые]


moderator




Сообщение: 3
Зарегистрирован: 09.11.09
Репутация: 0
ссылка на сообщение  Отправлено: 09.11.09 18:04. Заголовок: Урок 2 Первая прогр..


Урок 2

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

Пишем первую программу на C#. Запускайте Visual Studio.NET. Для создания нового пустого проекта C# нажимаем на кнопку в New Project, или нажимаем комбинацию клавиш Ctrl+Shift+N, или просто заходим в меню File и далее выбираем New и затем Project:



В появившемся окне New Project слева выбираем, естественно, Visual C#, а справа тип приложения - Console Application:



В качестве имени проекта (Name) напечатайте MyFirstApp или что-то в этом роде. Нажмитие кпопку Ok для закрытия данного диалогового окна.
Теперь приступаем к коду. Наша первая программа просто выведет некоторое фиксированное слово в консольное окошко. Вот ее листинг.


 цитата:
using System;
namespace first
{
///
/// Summary description for MyFirstClass.
///
class MyFirstClass
{
///
/// The main entry point for the application.
///
[STAThread]
static void Main(string[] args)
{
//
// TODO: Add code to start application here
//
Console.WriteLine("Я начинаю изучать C#");
}
}
}



Запускаем программу, нажав Ctrl+F5. Результат будет таким:



Разберем текст программы поподробнее. Как вы знаете из предыдущего урока, в .NET Runtime существуют пространства имен. Одно из таких пространств - это System. Вообще-то оно добавляется автоматически в любой проект на C#. Так как мы добавили в нашу программу строчку


 цитата:
...
using System;
...



то мы можем вместо длинных имен использовать более короткие. В частности, вместо System.Console можно писать просто Console. Что мы делаем в строчке

 цитата:
...
Console.WriteLine("Я начинаю изучать C#");
...


Далее мы в нашей программе объявляем класс MyFirstClass. Что такое классы мы посмотрим в последующих уроках, сейчас же достаточно сказать, что в C# не существует глобальных функций, так что нам ничего не остается, как завести сначало класс и затем функцию Main в нем (функция Main обязательно должна быть в каждой программе на C#, и именно с этой функции и начинается выполнение программы. Обратите также внимание, что эта функция пишется с прописной (большой) буквы. C# различает строчные и прописные буквы, так что это важно). Кроме того, эта функция объявлена с модификатором static. Это означает, что она не относится к конкретному экземпляру класса MyFirstClass, а принадлежит всему классу. В нашей функции Main мы просто выводим на экран некоторую строчку методом WriteLine.
Как вы обратили внимание программа выполнилась и быстро закрыла свое окно, для того что бы такого не произошло, добавим еще одну строку в нашу программу:


 цитата:
...
Console.WriteLine("Я начинаю изучать C#");
Console.ReadLine();
...




ReadLine как видно из названия, считывает строку.
Теперь после запуска окно остается и программа ждет ввода. Для завершения ее работы требуется нажать Enter.

Теперь напишем эту же программу но для Windows Forms:
Создадим новый проект, но тип проекта выберем «Windows Forms Application», зададим ему имя MyFirsWinApp, нажмите «OK». Перед вами появилась пустая форма. Поместим на нее кнопку (Button).



После того как разместили кнопку по ней следует кликнуть два раза мышкой, тогда откроется окно редактора кода. Напишем такую строчку:


 цитата:
MessageBox.Show ("Я начинаю изучать С#");



Можно запускать программу.
С первой программой на C# все.

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Сообщение: 4
Зарегистрирован: 09.11.09
Репутация: 0
ссылка на сообщение  Отправлено: 09.11.09 18:05. Заголовок: Урок 3 Алфавит и си..


Урок 3

Алфавит и синтаксис C#

АЛФАВИТ С#


Алфавит (или множество литер) языка программирования С# составляют символы таблицы кодов ASCII. Алфавит С# включает:
• строчные и прописные буквы латинского алфавита (мы их будем называть буквами);
• цифры от 0 до 9 (назовем их буквами-цифрами);
• символ «_» (подчеркивание — также считается буквой);
• набор специальных символов: " { }, 1 [ ] + — %/ \; ' : ? < > = ! & # ~ *-
• прочие символы.
Алфавит С# служит для построения слов, которые в C++ называются лексемами. Различают пять типов лексем:
• идентификаторы;
• ключевые слова;
• знаки (символы) операций;
• литералы;
• разделители.
Почти все типы лексем (кроме ключевых слов и идентификаторов) имеют собственные правила словообразования, включая собственные подмножества алфавита.
Лексемы обособляются разделителями. Этой же цели служит множество пробельных символов, к числу которых относятся пробел, табуляция, символ новой строки и комментарии.

ПРАВИЛА ОБРАЗОВАНИЯ ИДЕНТИФИКАТОРОВ

Рассмотрим правила построения идентификаторов из букв алфавита.
• Первым символом идентификатора С# может быть только буква.
• Следующими символами идентификатора могут быть буквы, цифры и нижнее подчеркивание.
• Длина идентификатора не ограничена.
Вопреки правилам словообразования, в С# существуют ограничения относительно применения подчеркивания в качестве самой первой буквы в идентификаторах. Из-за особенностей реализации использование идентификаторов, которые начинаются с этого символа, нежелательно.

РЕКОМЕНДАЦИИ ПО НАИМЕНОВАНИЮ ОБЪЕКТОВ

Имена —это идентификаторы. Любая случайным образом составленная последовательность букв, цифр и знаков подчеркивания с точки зрения грамматики языка идеально подходит на роль имени любого объекта, если только начинается с буквы. Фрагмент программы, содержащий подобную переменную, будет синтаксически безупречен.
И все же имеет смысл воспользоваться дополнительной возможностью облегчить восприятие и понимание последовательностей операторов. Для этого достаточно закодировать с помощью имен содержательную информацию.
Желательно создавать составные осмысленные имена. В этом случае в одно слово можно «втиснуть» предложение, которое в доступной форме представит информацию о типе объекта, его назначении и особенностях использования.

КЛЮЧЕВЫЕ СЛОВА И ИМЕНА

Часть идентификаторов С# входит в фиксированный словарь ключевых слов. Эти идентификаторы образуют подмножество ключевых слов (они так и называются ключевыми словами). Прочие идентификаторы после специального объявления становятся именами. Имена служат для обозначения переменных, типов данных, функций. Обо всем этом позже.
Ниже приводится таблица со списком ключевых слов. Вы не можете использовать эти имена для образования классов, функций, переменных и других языковых структур.


 цитата:
abstract do in protected true
as double int public try
base else interface readonly typeof
bool enum internal ref uint
break event is return ulong
byte explicit lock sbyte unchecked
case extern long sealed unsafe
catch false namespace short ushort
char finally new sizeof using
checked fixed null stackalloc virtual
class float object static void
const for operator string volatile
continue foreach out struct while
decimal goto override switch
default if params this
delegate implicit private throw



КОММЕНТАРИИ


Часто бывает полезно вставлять в программу текст, который является комментарием только для читающего программу человека и игнорируется компилятором. В С# это можно сделать одним из двух способов.
Символы /* начинают комментарий, заканчивающийся символами */
Такая последовательность символов эквивалентна символу пропуска (например, символу пробела). Это особенно полезно для многострочных комментариев и изъятия частей программы при редактировании, однако следует помнить, что комментарии /* */ не могут быть вложенными.
Символы // начинают комментарий, заканчивающийся в конце строки, на которой они появились. И здесь вся последовательность символов эквивалентна пропуску. Этот способ наиболее полезен для коротких комментариев. Символы // можно использовать для того, чтобы закомментировать символы /* или */, а символами /* можно закомментировать //.

ЛИТЕРАЛЫ

В С# существует четыре типа литералов:
• целочисленный литерал;
• вещественный литерал;
• символьный литерал;
• строковый литерал.
Литералы — это особая категория слов языка. Для каждого подмножества литералов используются собственные правила словообразования. Мы не будем приводить их здесь, ограничившись лишь общим описанием структуры и назначения каждого подмножества литералов. После этого правила станут более-менее понятны.
Целочисленный литерал служит для записи целочисленных значений и является соответствующей последовательностью цифр (возможно, со знаком '-'). Целочисленный литерал, начинающийся со знака 0, воспринимается как восьмеричное целое. В этом случае цифры 8 и 9 не должны встречаться среди составляющих литерал символов. Целочисленный литерал, начинающийся с Ох или ОХ, воспринимается как шестнадцатеричное целое. В этом случае целочисленный литерал может включать символы от А или а, до F или f, которые в шестнадцатеричной системе эквивалентны десятичным значениям от 10 до 15. Непосредственно за литералом могут располагаться в произвольном сочетании один или два специальных суффикса: U (или и) и L (или l).
Вещественный литерал служит для отображения вещественных значений. Он фиксирует запись соответствующего значения в обычной десятичной или научной нотациях. В научной нотации мантисса отделяется от порядка литерой Е (или е). Непосредственно за литералом может располагаться один из двух специальных суффиксов: F (или f) и L (или l).
Значением символьного литерала является соответствующее значение ASCII кода (это, разумеется, не только буквы, буквы-цифры или специальные символы алфавита С#). Символьный литерал представляет собой последовательность одной или нескольких литер, заключенных в одинарные кавычки. Символьный литерал служит для представления литер в одном из форматов представления. Например, литера Z может быть представлена литералом «Z», а также литералами «\132» и «\х5А». Любая литера может быть представлена в нескольких форматах представления: обычном, восьмеричном и шестнадцатеричном.
Строковые литералы являются последовательностью (возможно, пустой) литер в одном из возможных форматов представления, заключенных в двойные кавычки. Строковые литералы, расположенные последовательно, соединяются в один литерал, причем литеры соединенных строк остаются различными. Так, последовательность строковых литералов «\xF» «F» после объединения будет содержать две литеры, первая из которых является символьным литералом в шестнадцатеричном формате «\xF», вторая — символьным литералом «F». Строковый литерал и объединенная последовательность строковых литералов заканчиваются пустой литерой, которая используется как индикатор конца литерала.

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Сообщение: 6
Настроение: НОРМАЛЬНОЕ
Зарегистрирован: 09.11.09
Откуда: Россия, СПБ
Репутация: 0
ссылка на сообщение  Отправлено: 10.11.09 11:45. Заголовок: Типы данных C# С# я..


Урок 4

Типы данных C#

С# является жестко типизированным языком. При его использовании вы должны объявлять тип каждого объекта, который создаете (например, целые числа, числа с плавающей точкой, строки, окна, кнопки, и т. д.), и компилятор поможет вам избежать ошибок, связанных с присвоением переменным значений только того типа, который им соответствует. Тип объекта указывает компилятору размер объекта (например, объект типа int занимает в памяти 4 байта) и его свойства (например, форма может быть видима и невидима, и т.д.).
Подобно языкам C++ и Java, C# подразделяет типы на два вида: встроенные типы, которые определены в языке, и определяемые пользователем типы, которые выбирает программист.
С# также подразделяет типы на две другие категории: размерные и ссылочные. Основное различие между ними — это способ, которым их значения сохраняются в памяти. Размерные типы сохраняют свое фактическое значение в стеке. Ссылочные типы хранят в стеке лишь адрес объекта, а сам объект сохраняется в куче. Куча — основная память программ, доступ к которой осуществляется на много медленнее чем к стеку. Если вы работаете с очень большими объектами, то сохранение их в куче имеет много преимуществ.
В следующих уроках будут подробно рассмотрены различные преимущества и недостатки работы с ссылочными типами.
С# также поддерживает и указатели на типы, но они редко употребляются. Применение указателей связано с использованием неуправляемого кода.

ОСОБЕННОСТИ ИСПОЛЬЗОВАНИЯ СТЕКА И КУЧИ

Стек — это структура данных, которая сохраняет элементы по принципу: первым пришел, последним ушел (полная противоположность очереди). Стек относится к области памяти, поддерживаемой процессором, в которой сохраняются локальные переменные. Доступ к стеку во много раз быстрее, чем к общей области памяти, поэтому использование стека для хранения данных ускоряет работу вашей программы. В С# размерные типы (например, целые числа) располагаются в стеке: для их значений зарезервирована область в стеке, и доступ к ней осуществляется по названию переменной.
Ссылочные типы (например, объекты) располагаются в куче. Куча —это оперативная память вашего компьютера. Доступ к ней осуществляется медленнее, чем к стеку. Когда объект располагается в куче, то переменная хранит лишь адрес объекта. Этот адрес хранится в стеке. По адресу программа имеет доступ к самому объекту, все данные которого сохраняются в общем куске памяти (куче).
«Сборщик мусора» уничтожает объекты, располагающиеся в стеке, каждый раз, когда соответствующая переменная выходит за область видимости. Таким образом, если вы объявляете локальную переменную в пределах функции, то объект будет помечен как объект для «сборки мусора». И он будет удален из памяти после завершения работы функции.
Объекты в куче тоже очищаются сборщиком мусора, после того как конечная ссылка на них будет разрушена.

ВСТРОЕННЫЕ ТИПЫ

Язык С# предоставляет программисту широкий спектр встроенных типов, которые соответствуют CLS (Common Language Specification) и отображаются на основные типы платформы .NET. Это гарантирует, что объекты, созданные на С#, могут успешно использоваться наряду с объектами, созданными на любом другом языке программирования, поддерживающем .NET CLS (например, VB.NET).
Каждый тип имеет строго заданный для него размер, который не может изменяться. В отличие от языка C++, в С# тип int всегда занимает 4 байта, потому что отображается к Int32 в .NET CLS. Представленная ниже таблица содержит список всех встроенных типов, предлагаемых С#.



 цитата:
Тип Область значений Размер

sbyte -128 до 127 Знаковое 8-бит целое
byte 0 до 255 Беззнаковое 8-бит целое
char U+0000 до U+ffff 16-битовый символ Unicode
bool true или false 1 байт
short -32768 до 32767 Знаковое 16-бит целое
ushort 0 до 65535 Беззнаковое 16-бит целое
int -2147483648 до 2147483647 Знаковое 32-бит целое
uint 0 до 4294967295 Беззнаковое 32-бит целое
long -9223372036854775808 до 9223372036854775807 Знаковое 32-бит целое
ulong 0 до 18446744073709551615 Беззнаковое 32-бит целое
float ±1,5*10-45 до ±3,4*1033 4 байта, точность — 7 разрядов
double ±5*10-324 до ±1,7*10306 8 байт, точность —16 разрядов
decimal 12 байт, точность — 28 разрядов



В дополнение к этим примитивным типам С# может иметь объекты типа enum и struct.


Преобразование встроенных типов

Объекты одного типа могут быть преобразованы в объекты другого типа неявно или явно. Неявные преобразования происходят автоматически, компилятор делает это вместо вас. Явные преобразования осуществляются, когда вы «приводите» значение к другому типу. Неявные преобразования гарантируют также, что данные не будут потеряны. Например, вы можете неявно приводить от short (2 байта) к int (4 байта).
Независимо от того, какой значение находится в short, оно не потеряется при преобразовании к int:


 цитата:
short x = 1;
int у = х; //неявное преобразование



Если вы делаете обратное преобразование, то, конечно же, можете потерять информацию. Если значение в int больше, чем 32.767, оно будет усечено при преобразовании. Компилятор не станет выполнять неявное преобразование от int к short:


 цитата:
short х;
int у - 5;
х = у; //не скомпилируете



Вы должны выполнить явное преобразование, используя оператор приведения:


 цитата:
short х;
int у - 5;
х = (short) у;//OK



Переменные

Переменная — это расположение в памяти объекта определенного типа. В приведенных выше примерах х и у — переменные. Переменные могут иметь значения, которыми они проинициализированы, или эти значения могут быть изменены программно.
Назначение значений переменным Чтобы создать переменную, вы должны задать тип переменной и затем дать этому типу имя. Вы можете проинициализировать переменную во время ее объявления или присвоить ей новое значение во время выполнения программы. Вот пример программы, который в первом случае использует инициализацию для присвоения значения переменной, во втором случае использует присвоение значения переменной с помощью оператора «=»:


 цитата:
class Variables
{
static void Main()
{
int myInt = 10;
System.Console.WriteLine("Инициализированная переменная myInt: {0} ", myInt);
myInt = 5;
System.Console.WriteLine("Переменная myInt после присвоения значения: {0}", myInt);
Console.ReadLine();
}

}



Результат работы этой программы будет следующий:
Инициализированная переменная mylnt: 10
myInt после присвоения значения: 5
Здесь строка:
int myInt = 10;
означает объявление и инициализацию переменной mylnt. Строка:
myInt= 5 ;
означает присвоение переменной mylnt значения 5.

Определение значений переменных

С# требует определения значений, то есть переменные перед использованием должны быть инициализированы. Чтобы проверить это правило, рассмотрим следующий пример:


 цитата:
class Variables
{
static void Main()
{
int myInt;
System.Console.WriteLine("Неинициализированная переменная myInt: {0}", myInt);
myInt = 5;
System.Console.WriteLine("После присвоения переменной myInt: {0}", myInt);

}
}



Если вы попробуете скомпилировать этот пример, компилятор отобразит следующее сообщение об ошибке:
error CS3165: Use of unassigned local variable 'mylnt'
Нельзя использовать неинициализированную переменную в С#. У вас может сложиться впечатление, что вы должны инициализировать каждую переменную в программе. Это не так. Вы должны лишь назначить переменной значение прежде, чем попытаетесь ее использовать. Ниже представлен пример правильной программы без использования инициализации переменной


 цитата:
class Variables
{
static void Main()
{
int myInt;
myInt = 10;
System.Console.WriteLine("Инициализированная переменная myInt: {0}", myInt);
myInt = 5;
System.Console.WriteLine("После присвоения значения, myInt: {0}", myInt);

}
}



В данном примере вместо инициализации выбирается присвоение значения переменной mylnt до ее использования:
mylnt = 10;

Константы

Константа — это переменная, значение которой не может быть изменено. Переменные — это более гибкий способ хранения данных. Однако иногда вы хотите гарантировать сохранение значения определенной переменной.
Например, число pi. Как известно, значение этого числа никогда не изменяется. Следовательно, вы должны гарантировать, что переменная, хранящая это число, не изменит своего значения на протяжении всей работы программы. Ваша программа будет лучше читаемой, если вы вместо записи:
у = х*3.1415926535897932384626433832795
будете использовать переменную, которая хранит значение pi. В таком случае используемой переменной должна быть константа:
const double pi = 3.1415926535897932384626433832795;
у = х * pi;
Существует три разновидности константы: литералы, символические константы и перечисления. Рассмотрим следующий случай:
х = 100;
Значение 100 — это литеральная константа. Значение 100 —это всегда 100. Вы не можете установить новое значение на 100. Вы не можете сделать так, чтобы 100 представляло значение 99. Символические константы устанавливают имя для некоторого постоянного значения. Вы объявляете символическую константу, используя ключевое слово const, и применяете следующий синтаксис для создания константы:
const тип идентификатор = значение;
Константа обязательно должна быть проинициализирована, и ее значение не может быть изменено во время выполнения программы. Например:
const double pi = 3.1415926535897932384626433832795;
pi = 5.0; //недопустимая операция
В этом примере число 3.14...—литеральная константа, a pi — символическая константа типа double. Ниже представлен пример использования символических констант.


 цитата:
class Constants
{
static void Main ()
{
const double pi = 3.1415926535897932384626433832795;
const double g = 9.81; //гравитационная постоянная
System.Console.WriteLine("Число пи: {0}" ,pi);
System.Console.WriteLine("Гравитационная постоянная: {0}",g);
}
}


Результат работы программы будет следующий:
Число пи: 3.1415926535897932384626433832795
Гравитационная постоянная: 9.81
В последнем примере создаются две символические целочисленные константы: pi и д. Эти константы преследуют ту же цель, что и использование их литеральных значений. Но данные константы имеют имена, которые несут в себе гораздо больше информации об используемом значении, чем просто набор цифр.
Для того чтобы убедиться, что константные значения не могут быть изменены во время выполнения программы, добавьте в код следующую строку:
g = 10;
Во время компиляции вы получите следующее сообщение об ошибке:
error CS0131: The left-hand side of an assignment must be a variable, property or indexer.

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

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


 цитата:
const int maryBirthday = 1955;
const int ivanBirthday = 1980;
const int pavelBirthday = 1976;



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



 цитата:
enum FriendsBirthday
{
const int maryBirthday = 1955;
const int ivanBirthday = 1980;
const int pavelBirthday = 1976;
}



Теперь три символические константы являются элементами одного перечисления типа FriendsBirthday.
Каждое перечисление имеет свой базовый тип, которым может быть любой встроенный целочисленный тип С# (int, long, short и т. д.), за исключением char.
Перечисление задается следующим образом:
[атрибуты] [модификаторы] enum идентификатор[: базовый тип] (список перечислений);
Атрибуты и модификаторы будут рассматриваться далее. Пока давайте остановимся на второй части этого объявления. Перечисление начинается с ключевого слова enum, которое сопровождается идентификатором типа:
enum MyEnurnerators
Базовый тип — основной тип для перечисления. Если вы не учитываете этот описатель при создании перечисления, то будут использоваться значения по умолчанию int. Но вы можете применить любой из целочисленных типов (например, ushort, long), за исключением char. Например, следующий фрагмент кода объявляет перечисление целых чисел без знака (uint):



 цитата:
enum Sizes: uint
{
Small = 1,
Middle = 2,
Large = 3
}



Внутри каждого перечисления записывается список возможных значений перечисления, разделенных запятой. Каждое значение может представлять собой либо просто набор символических констант, либо набор символических констант в сочетании с литеральным целочисленным значением. Если вы не укажете для элементов перечисления целочисленных значений, то компилятор пронумерует их сам, начиная с 0. Например, следующие фрагменты кода аналогичны:



 цитата:
enum Sizes: uint
{
Small,
Middle,
Large
}




Если вы объявите свое перечисление следующим образом:



 цитата:
enum Sizes: uint
{
Small,
Middle = 20,
Large
}




то элементы перечисления будут иметь такие числовые значения:
Small = 0;
Middle = 20;
Large = 21.
Давайте рассмотрим пример, который наглядно показывает, каким образом перечисления помогают упростить код приложения.



 цитата:
class ScreenResolutions
{
//перечисление размеров мониторов в дюймах
enum Screens
{
Small = 14,
Medium = 17,
Large = 19,
SuperLarge = 21
}
static void Main()
{
System.Console.WriteLine("Самые маленькие мониторы имеют размер: {0}", (int) Screens.Small );
System.Console.WriteLine("Самые большие мониторы имеют размер: {0}", (int) Screens.SuperLarge);
}
}



Как видите, значение перечисления (SuperLarge) должно быть специфицировано именем перечисления (Screens). По умолчанию, значение перечисления представляется его символическим именем (типа Small или Medium). Если вы хотите отобразить значение константы перечисления, то должны привести константу к ее основному типу (в данном случае int).
Целочисленное значение передается в функцию WriteLine, и оно отображается на экране.

Строковые константы

Для объявления в программе константной строки вам необходимо заключить содержимое строки в двойные кавычки ("My string"). Вы можете делать это практически в любом месте программы: в передаче параметров функции, в инициализации переменных. Мы уже неоднократно применяли строковые константы при выводе данных на экран.
System.Console.WriteLine("Самые большие мониторы имеют размер: {С}", (int) Screens.SuperLarge);
Здесь в качестве одного из параметров функции используется строка "Самые большие мониторы имеют размер: {0}".
string strMessage = "Здравствуй Мир!";
В данном случае константная строка «Здравствуй Мир!» инициализирует переменную strMessage.

Массивы

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



 цитата:
int [ ] к; //к - массив
k=new int [3]; //Определяем массив из 3 целых
к[0]=-5; к[1]-4; к[2]=55; //Задаем элементы массива
//Выводим третий элемент массива
Console.WriteLine(к[2] .ToString ());




Смысл приведенного фрагмента ясен из комментариев. Обратите внимание на некоторые особенности. Во-первых, массив определяется именно как
int[] к;
а не как один из следующих вариантов:



 цитата:
int k[]; //Неверно!
int k [3]; //Неверно !
int [3] к; //Неверно!



Во-вторых, так как массив представляет собой ссылочный объект, то для создания массива необходима строка
k=new int [3];
Именно в ней мы и определяем размер массива. Кроме того, возможны конструкции вида
int [] k = new int [3];
Элементы массива можно задавать сразу при объявлении. Например:
int [] к = {-5, 4, 55} ;
Разумеется, приведенные конструкции применимы не только к типу int и не только к массиву размера 3.
В С#, как и в C/C++, нумерация элементов массива идет с нуля. Таким образом, в нашем примере начальный элемент массива — это k[0], a последний — к[2]. Элемента к[3], естественно, нет.
Теперь переходим к многомерным массивам. Вот так задается двумерный массив:



 цитата:
int [] k = new int [2, 3];



Обратите внимание, что пара квадратных скобок только одна. В нашем примере у массива 6 (=2*3) элементов (к[0,0] — первый, к[1,2] — последний).
Аналогично мы можем задавать многомерные массивы. Вот пример трехмерного массива:



 цитата:
int [] к = new int [10,10,10];




А вот так можно сразу инициализировать многомерные массивы:



 цитата:
int[,] k = {{ 2, -2 }, { 3, -22 }, { 0, 4 }};




Приведенные выше примеры многомерных массивов называются прямоугольными. Если их представить в виде таблицы (в двумерном случае), то массив будет представлять собой прямоугольник.
Наряду с прямоугольными массивами существуют так называемые ступенчатые. Вот пример:
//Объявляем 2-мерный ступенчатый массив
int[][] k = new int [2][];
//Объявляем 0-й элемент нашего ступенчатого массива
//Это опять массив и в нем 3 элемента
k[0]=new int[3];
//Объявляем 1-й элемент нашего ступенчатого массива
//Это опять массив и в нем 8 элементов
k[1]=new int[8];
k[1][7]=100; //записываем 100 в последний элемент массива

Обратите внимание, что у ступенчатых массивов мы задаем несколько пар квадратных скобок (по размерности массива). И точно так же мы что-нибудь делаем с элементами массива — записываем, читаем и т. п.
Самая важная и интересная возможность ступенчатых массивов — это их «непрямоугольность». Так, в приведенном выше примере в первой «строке» массива к три целых числа, а во второй — восемь. Часто это оказывается очень кстати.




Спасибо: 1 
ПрофильЦитата Ответить





Сообщение: 5
Настроение: Нормальное
Зарегистрирован: 24.11.09
Откуда: Украина, Киев
Репутация: 2
ссылка на сообщение  Отправлено: 30.11.09 01:43. Заголовок: Большое спасибо за п..


Большое спасибо за предоставленный материал!

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 0
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет



счетчик посещений                                                                                                                                                                                                                                                                                                                
купить Apple iPad                                                             Соколов Максим, 2010. Уникальный дизайн и контент принадлежат MSSG. Все права защищены.