C Sharp — это… Что такое C Sharp?
У этого термина существуют и другие значения, см. C.- Правильный заголовок этой статьи — C#. Он показан некорректно из-за технических ограничений.
Семантика: | императивный |
---|---|
Класс языка: | мультипарадигменный: |
Появился в: | 2000 |
Автор(ы): | Андерс Хейлсберг |
Релиз: | 5.0 (15 августа 2012) |
Типизация данных: | статическая, динамическая, строгая, утиная, вывод типов |
Основные реализации: | Visual C#, .NET Framework, Mono, DotGNU |
Диалекты: | Cω, Spec#, Polyphonic C# |
Испытал влияние: | C++, Java[1][2] |
Повлиял на: | Cω, F#, Nemerle, Vala, Windows PowerShell |
C# (произносится си шарп) — объектно-ориентированный язык программирования. Разработан в 1998—2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как язык разработки приложений для платформы Microsoft .NET Framework и впоследствии был стандартизирован как ECMA-334 и ISO/IEC 23270.
C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML.
Переняв многое от своих предшественников — языков C++, Java, Delphi, Модула и Smalltalk — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем, например, C# в отличие от C++ не поддерживает множественное наследование классов (между тем допускается множественное наследование интерфейсов).
Особенности языка
C# разрабатывался как язык программирования прикладного уровня для CLR и, как таковой, зависит, прежде всего, от возможностей самой CLR. Это касается, прежде всего, системы типов C#, которая отражает BCL. Присутствие или отсутствие тех или иных выразительных особенностей языка диктуется тем, может ли конкретная языковая особенность быть транслирована в соответствующие конструкции CLR. Так, с развитием CLR от версии 1.1 к 2.0 значительно обогатился и сам C#; подобного взаимодействия следует ожидать и в дальнейшем. (Однако эта закономерность была нарушена с выходом C# 3.0, представляющего собой расширения языка, не опирающиеся на расширения платформы .NET.) CLR предоставляет C#, как и всем другим .NET-ориентированным языкам, многие возможности, которых лишены «классические» языки программирования. Например, сборка мусора не реализована в самом C#, а производится CLR для программ, написанных на C# точно так же, как это делается для программ на VB.NET, J# и др.
Название языка
Название «Си шарп» (от англ. sharp — диез) происходит от музыкальной нотации, где знак диез, прибавляемый к основному обозначению ноты, означает повышение соответствующего этой ноте звука на полутон.[4] Это аналогично названию языка C++, где «++» обозначает, что переменная должна быть увеличена на 1.
Вследствие технических ограничений на отображение (стандартные шрифты, браузеры и т. д.) и того обстоятельства, что знак диез ♯ не представлен на стандартной клавиатуре, знак номера # был выбран для представления знака диез при записи имени языка программирования.[5] Это соглашение отражено в Спецификации Языка C# ECMA-334.[6] Тем не менее, на практике (например, при размещении рекламы и коробочном дизайне [7]), Майкрософт использует предназначенный музыкальный знак.
Названия языков программирования не принято переводить, поэтому зачастую язык называют по-английски «Си шарп».
Стандартизация
C# стандартизирован в ECMA (ECMA-334)[8] и ISO (ISO/IEC 23270)[9].
Известно, как минимум, о трёх независимых реализациях C#, базирующихся на этой спецификации и находящихся в настоящее время на различных стадиях разработки:
Версии
На протяжении разработки языка C# было выпущено несколько его версий:
C# 2.0 | C# 3.0 | C# 4.0 | C# 5.0 | |
---|---|---|---|---|
Новые возможности |
|
|
|
|
Версия 1.0
Проект C# был начат в декабре 1998 и получил кодовое название COOL (C-style Object Oriented Language). Версия 1.0 была анонсирована вместе с платформой .NET в июне 2000 года, тогда же появилась и первая общедоступная бета-версия; C# 1.0 окончательно вышел вместе с Microsoft Visual Studio .NET в феврале 2002 года.
Первая версия C# напоминала по своим возможностям Java 1.4, несколько их расширяя: так, в C# имелись свойства (выглядящие в коде как поля объекта, но на деле вызывающие при обращении к ним методы класса), индексаторы (подобные свойствам, но принимающие параметр как индекс массива), события, делегаты, циклы foreach
, структуры, передаваемые по значению, автоматическое преобразование встроенных типов в объекты при необходимости (boxing), атрибуты, встроенные средства взаимодействия с неуправляемым кодом (DLL, COM) и прочее.
Кроме того, в C# решено было перенести некоторые возможности C++, отсутствовавшие в Java: беззнаковые типы, перегрузку операторов (с некоторыми ограничениями, в отличие от C++), передача параметров в метод по ссылке, методы с переменным числом параметров, оператор goto
(с ограничениями). Также в C# оставили ограниченную возможность работы с указателями — в местах кода, специально обозначенных словом unsafe
и при указании специальной опции компилятору.
Версия 2.0
Проект спецификации C# 2.0 впервые был опубликован Microsoft в октябре 2003 года; в 2004 году выходили бета-версии (проект с кодовым названием Whidbey), C# 2.0 окончательно вышел 7 ноября 2005 года вместе с Visual Studio 2005 и .NET 2.0.
- Новые возможности в версии 2.0
- Частичные типы (разделение реализации класса более чем на один файл).
- Обобщённые, или параметризованные типы (generics). В отличие от шаблонов C++, они поддерживают некоторые дополнительные возможности и работают на уровне виртуальной машины. Вместе с тем, параметрами обобщённого типа не могут быть выражения, они не могут быть полностью или частично специализированы, не поддерживают шаблонных параметров по умолчанию, от шаблонного параметра нельзя наследоваться, и т. д.[12]
- Новая форма итератора, позволяющая создавать сопрограммы с помощью ключевого слова
yield
, подобно Python и Ruby. - Анонимные методы, обеспечивающие функциональность замыкания.
- Оператор ‘??’:
return obj1 ?? obj2;
означает (в нотации C# 1.0)return obj1!=null ? obj1 : obj2;
. - Обнуляемые (‘nullable’) типы-значения (обозначаемые вопросительным знаком, например,
int? i = null;
), представляющие собой те же самые типы-значения, способные принимать также значениеnull
. Такие типы позволяют улучшить взаимодействие с базами данных через язык SQL. - Возможность создавать хранимые процедуры, триггеры и даже типы данных на .Net языках (в том числе и на C#).
- Поддержка 64-разрядных вычислений, что кроме всего прочего, позволяет увеличить адресное пространство и использовать 64-разрядные примитивные типы данных.
Версия 3.0
В июне 2004 года Андерс Хейлсберг впервые рассказал на сайте Microsoft о планируемых расширениях языка в C#3.0.[13] В сентябре 2005 года вышли проект спецификации C# 3.0 и бета-версия C# 3.0, устанавливаемая в виде дополнения к существующим Visual Studio 2005 и .NET 2.0. Окончательно эта версия языка вошла в Visual Studio 2008 и .NET 3.5.
- Новые возможности в версии 3.0
В C# 3.0 появились следующие радикальные добавления к языку:
- ключевые слова
select, from, where
, позволяющие делать запросы из SQL, XML, коллекций и т. п. (запрос, интегрированный в язык, Language Integrated Query, или LINQ) - Инициализация объекта вместе с его свойствами:
Customer c = new Customer(); c.Name = "James"; c.Age=30;
- можно записать как
Customer c = new Customer { Name = "James", Age = 30 };
listOfFoo.Where(delegate(Foo x) { return x.size > 10; });
- теперь можно записать как
listOfFoo.Where(x => x.size > 10);
- Деревья выражений:
- лямбда-выражения теперь могут представляться в виде структуры данных, доступной для обхода во время выполнения, тем самым позволяя транслировать строго типизированные C#-выражения в другие домены (например, выражения SQL).
- Вывод типов локальной переменной:
var x = "hello";
вместоstring x = "hello";
- Безымянные типы:
var x = new { Name = "James" };
- Методы-расширения — добавление метода в существующий класс с помощью ключевого слова
this
при первом параметре статической функции.
public static class StringExtensions { public static int ToInt32(this string val) { return Int32.Parse(val); } } // ... string s = "10"; int x = s.ToInt32();
- Автоматические свойства: компилятор сгенерирует закрытое (private) поле и соответствующие аксессор и мутатор для кода вида
public string Name { get; private set; }
C# 3.0 совместим с C# 2.0 по генерируемому MSIL-коду; улучшения в языке — чисто синтаксические и реализуются на этапе компиляции. Например, многие из интегрированных запросов LINQ можно осуществить, используя безымянные делегаты в сочетании с предикатными методами над контейнерами наподобие
и List.RemoveAll
.
Версия 4.0
Превью C# 4.0 было представлено в конце 2008 года, вместе с CTP-версией Visual Studio 2010.
Visual Basic 10.0 и C# 4.0 были выпущены в апреле 2010 года, одновременно с выпуском Visual Studio 2010.
- Новые возможности в версии 4.0[14]
- Возможность использования позднего связывания, для использования:
- с языками с динамической типизацией (Python, Ruby)
- с COM-объектами
- отражения (reflection)
- объектов с изменяемой структурой (DOM). Появляется ключевое слово dynamic.
- Именованные и опциональные параметры
- Новые возможности COM interop
- Ковариантность и контрвариантность
- Контракты в коде (Code Contracts)
Примеры:
dynamic calc = GetCalculator(); int sum = calc.Add(10, 20); // Динамический вызов
public void SomeMethod(int x, int y = 5, int z = 7); // Опциональные параметры
Пример «Hello, World!»
Ниже представлен код классической программы «Hello world» на C# для консольного приложения:
using System; namespace Example { class Program { static void Main() { Console.WriteLine("Hello World!"); // Вывод заданного текста в консоль Console.ReadKey(); // Ожидание нажатия клавиши пользователем } } }
и код этой же программы для приложения Windows Forms:
using System; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } private void OnButtonClick(object sender, EventArgs e) // Элемент lbl_hello добавлен предварительно { lbl_hello.Text = "Hello, World!"; } } }
Реализации
Существует несколько реализаций C#:
- Реализация C# в виде компилятора csc.exe включена в состав .NET Framework (включая .NET Micro Framework, .NET Compact Framework и его реализации под Silverlight и Windows Phone 7).
- В составе проекта Rotor (Shared Source Common Language Infrastructure) компании Microsoft.
- Проект Mono включает в себя реализацию C# с открытым исходным кодом.
- Проект DotGNU также включает компилятор C# с открытым кодом.
- DotNetAnywhere[15] — ориентированная на встраиваемые системы реализация CLR, поддерживает практически всю спецификацию C# 2.0.
См. также
Примечания
- ↑ «Поскольку язык С# унаследовал свой синтаксис от C++ и Java…» (Трей Нэш «C# 2010: ускоренный курс для профессионалов» («Accelerated C# 2010») — М.: Вильямс, 2010. — С. 592. — ISBN 978-5-8459-1638-9; стр. 17)
- ↑ «Язык C# … унаследовал много полезных возможностей от других языков программирования и напрямую связан с двумя наиболее широко применяемыми в мире компьютерными языками — C и C++, а также с языком Java.», однако далее: «Связь между C# и Java более сложная. Оба языка разработаны для создания переносимого кода, базируются на C и C++, используют их синтаксис и объектную модель. Однако между этими языками нет прямой связи, они больше похожи на двоюродных братьев, имеющих общих предков, но отличающихся многими признаками.» (Герберт Шилдт «C# учебный курс». — М.: Питер. 2003. — стр. 20).
- ↑ Герберт Шилдт Полный справочник по С#. : Пер. с англ. — М. : Издательский дом «Вильямс», 2004. — 752 с. : ил. — Парал. тит. англ. ISBN 5-8459-0563-X (рус.) стр. 26-27.
- ↑ Kovacs, James C#/.NET History Lesson (September 7, 2007). Архивировано из первоисточника 21 августа 2011. Проверено 23 марта 2011.
- ↑ Microsoft C# FAQ. Microsoft.(недоступная ссылка — история) Проверено 25 марта 2008.(недоступная ссылка — история)
- ↑ C# Language Specification. — 4th. — ECMA International, 2006.
- ↑ Visual C#.net Standard (JPEG). Microsoft (September 4, 2003). Архивировано из первоисточника 21 августа 2011. Проверено 18 июня 2009.
- ↑ Standard ECMA-334 C# Language Specification, 4rd edition (June 2006)
- ↑ ISO/IEC 23270:2003, Information technology — C# Language Specification
- ↑ Спецификация по Microsoft C# 2.0 содержит описание лишь новых возможностей версии 2.0. Особенности версии описаны в спецификации 1.2, приведенной выше.
- ↑ Для версий языка C# 3.0, 4.0 и 5.0 пока нет утвержденных ECMA или ISO/IEC спецификаций.
- ↑ Differences Between C++ Templates and C# Generics (C# Programming Guide)
- ↑ MSDN News
- ↑ C# Future
- ↑ Dot Net Anywhere
Литература
- Джозеф Албахари, Бен Албахари C# 5.0. Справочник. Полное описание языка = C# 5.0 in a Nutshell: The Definitive Reference. — М.: «Вильямс», 2013. — 1008 с. — ISBN 978-5-8459-1819-2
- Эндрю Троелсен. Язык программирования C# 2010 и платформа .NET 4.0 = Pro C# 2010 and the .NET 4.0 Platform. — 5-е изд. — М.: Вильямс, 2010. — С. 1392. — ISBN 978-5-8459-1682-2
- Герберт Шилдт. C# 4.0: полное руководство = C# 4.0 The Complete Reference. — М.: «Вильямс», 2010. — С. 1056. — ISBN 978-5-8459-1684-6
- Джон Скит. C#: программирование для профессионалов, 2-е издание = C# in Depth, 2nd Edition. — М.: «Вильямс», 2011. — 544 с. — ISBN 978-5-8459-1555-9
- Кристиан Нейгел, Карли Уотсон и др. Visual C# 2010: полный курс = Beginning Microsoft Visual C# 2010. — М.: Диалектика, 2010. — ISBN 978-5-8459-1699-0
- Кристиан Нейгел, Билл Ивьен, Джей Глинн, Карли Уотсон, Морган Скиннер. C# 4: Платформа .NET 4 для профессионалов = Professional C# 4 and .NET 4. — М.: Диалектика, 2010. — С. 1440. — ISBN 978-5-8459-1656-3
Ссылки
Стандарты ISO | |
---|---|
Перечни: Перечень стандартов ИСО • Перечень романизаций ISO • Перечень стандартов IEC Категории: Категория:Стандарты ISO • Категория:Протоколы OSI | |
1 по 9999 | 1 • 2 • 3 • 4 • 5 • 6 • 7 • 9 • 16 • 31 (-0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13) • 128 • 216 • 217 • 226 • 228 • 233 • 259 • 269 • 296 • 302 • 306 • 428 • 639 (-1, -2, -3, -5, -6) • 646 • 690 • 732 • 764 • 843 • 898 • 1000 • 1004 • 1007 • 1073-1 • 1413 • 1538 • 1745 • 2014 • 2015 • 2022 • 2108 • 2145 • 2146 • 2281 • 2709 • 2711 • 2788 • 3029 • 3103 • 3166 (-1, -2, -3) • 3297 • 3307 • 3602 • 3864 • 3901 • 3977 • 4031 • 4157 • 4217 • 5218 • 5775 • 5776 • 5964 • 6166 • 6344 • 6346 • 6425 • 6429 • 6438 • 6523 • 6709 • 7001 • 7002 • 7098 • 7185 • 7388 • 7498 • 7736 • 7810 • 7811 • 7812 • 7813 • 7816 • 8000 • 8217 • 8571 • 8583 • 8601 • 8632 • 8652 • 8691 • 8807 • 8820-5 • 8859 (-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16) • 8879 • 9000 • 9075 • 9126 • 9241 • 9362 • 9407 • 9506 • 9529 • 9564 • 9594 • 9660 • 9897 • 9945 • 9984 • 9985 • 9995 |
10000 по 19999 | 10006 • 10118-3 • 10160 • 10161 • 10165 • 10179 • 10206 • 10303 • 10303-11 • 10303-21 • 10303-22 • 10303-238 • 10303-28 • 10383 • 10487 • 10585 • 10589 • 10646 • 10664 • 10746 • 10861 • 10957 • 10962 • 10967 • 11073 • 11170 • 11179 • 11404 • 11544 • 11783 • 11784 • 11785 • 11801 • 11898 • 11940 • 11941 • 11941 (TR) • 11992 • 12006 • 12164 • 12182:1998 • 12207:1995 • 12207:2008 • 12234-2 • 13211 (-1, -2) • 13216 • 13250 • 13399 • 13406-2 • 13407 • 13450 • 13485 • 13490 • 13567 • 13568 • 13584 • 13616 • 14000 • 14031 • 14396 • 14443 • 14496-10 • 14496-14 • 14644 (-1, -2, -3, -4, -5, -6, -7, -8, -9) • 14649 • 14651 • 14698 • 14698-2 • 14750 • 14882 • 14971 • 15022 • 15189 • 15288 • 15291 • 15292 • 15408 • 15444 • 15445 • 15438 • 15504 • 15511 • 15686 • 15693 • 15706 • 15706-2 • 15707 • 15897 • 15919 • 15924 • 15926 • 15926 WIP • 15930 • 16023 • 16262 • 16750 • 17024 • 17025 • 17369 • 17799 • 18000 • 18004 • 18014 • 18245 • 18629 • 18916 • 19005 • 19011 • 19092-1 • 19092-2 • 19114 • 19115 • 19439 • 19501:2005 • 19752 • 19757 • 19770 • 19775-1 • 19794-5 |
20000+ | 20000 • 20022 • 21000 • 21047 • 21827:2002 • 22000 • 23008-2 • 23270 • 23360 • 24613 • 24707 • 25178 • 26000 • 26300 • 26324 • 27000 series • 27000 • 27001 • 27002 • 27003 • 27004 • 27005 • 27006 • 27007 • 27729 • 27799 • 29199-2 • 29500 • 31000 • 32000 • 38500 • 42010 • 50001 • 80000 |
См. также: Все статьи, начинающиеся с «ISO» |
dic.academic.ru
Уроки программирования с нуля. Си-шарп для чайников
Книги по изучению языка Си-шарп, на которые я советую обратить особое внимание:C# и платформа .NET 3.0. Автор: Эндрю Троелсен. Очень хорошая книга, которая подходит, как опытным программистам, так и новичкам. Начинать изучать Си-шарп стоит с нее. Получить эту книгу вы можете здесь. | |
CLR via C#. Программирование на платформе Microsoft .NET Framework 4.5 на языке C#. 4-е изд.. Автор: Дж. Рихтер. Эта книга является классическим учебником по Си-шарп. Для начинающего программиста эта книга не рекомендуется, но если вы уже кое-что умеете и понимаете — обязательно к прочтению. Получить эту книгу вы можете здесь. | |
C#. Сборник рецептов. Автор: Павел Агуров. Как понятно из названия, в этой книге собраны решения типичных, стандартных задач, что позволит вам в будущем тратить меньше времени на решение подобного рода задач. Книга будет интересна опытным программистам. Получить эту книгу вы можете здесь. | |
ASP.NET MVC 4. Разработка реальных веб-предложений с помощью ASP.NET MVC. Авторы: Чедвик Дж., Снайдер Т., Панда Х. Если вы уже неплохо разбираетесь в Си-шарп, и хотите создавать на нем веб-приложения (сайты) с помощью технологии ASP.NET MVC — эта книга для вас. Получить эту книгу вы можете здесь. |
Ошибка в тексте? Выделите ее мышкой и нажмите Ctrl+Enter
Поблагодарить автора:
Номер карты (ПриватБанк)
5168 7572 4170 8660
WebMoney
R372544961915
U685637142028
Z999792764387
Наверх
mycsharp.ru
История развития C# (си шарп)
Язык программирования C# (си шарп) – язык объектного ориентирования, который разрабатывался с 1998 года специально для сети Интернет, а вернее, для платформы .NET. Он опирается на строгую компонентную архитектуру и обеспечивает надежные алгоритмы безопасности программного кода.
Первая бета-версия C# 1.0 увидела свет летом 2000 года, а в феврале 2002 с Microsoft Visual Studio вышла окончательная версия языка. Версия 1.0 вобрала в себя лучшие стороны предшествующих ей популярных языков программирования C, Java и C++. Это позволило программистам легко осуществить переход на C#, основываясь на знаниях любого из перечисленных ранних языков.
Основной синтаксис и операторы перешли в C# из C. Объектная модель, реализованная в C++, в C# гораздо усовершенствована. Если, по отношению к C и C++, первая версия C# является прямым потомком, то для Java он будет, скорее всего, кровным братом. Конечно, Java тоже происходит от семейства C, и имеет так же много общего с C#, как и много отличий.
Отличием от предшественников является то, что в C# включено поддержание написания компонентов программ. Подобной поддержкой, например, выступают такие средства, как события, методы и свойства. Но главным ключом в компонентной ориентированности C# является, конечно же, обеспечение безопасной работы в среде мультиязыкового программирования.
В 2005 году вышел окончательный релиз версии 2.0 C#. Она укрепила позиции этого языка программирования и окончательно убедила в его эффективности и дальнейшем развитии. Добавление новых возможностей, таких как анонимные методы, обобщения, частичные и параметризованные типы значительно расширили возможности применения C#. Во второй версии была добавлена поддержка 64-х разрядных вычислений, что открыло возможности в увеличении адресного пространства. Также было реализовано создание триггеров, хранимых процедур и типов данных на .NET языках.
Следующая версия C# 3.0, окончательно вышедшая уже в 2008 году, полностью изменила мир программирования. Множество важных новшеств позволили C# стать флагманом в эволюционном развитии языков программирования. К ним относятся такие нововведения как: язык интегрированных запросов (LINQ), позволивший осуществлять запросы из XML из SQL; не явно типизированные переменные и методы расширения; Lambda-выражения, которые назначают реализацию кода делегатам с помощью нового, более простого синтаксиса. Lambda-выражения вместе с языком интегрированных запросов выразили и акцентировали C# в качестве ведущего языка программирования. Анонимные типы переменных позволили избежать громоздкости и откровенного неудобства при описании переменных, дав возможность объявлять новый тип непосредственно при ее создании. Интересной новинкой в C# 3.0 стали так называемые «ленивые вычисления», которые производят необходимые вычисления только при запросе нужных соответствующих данных. Вы можете использовать корпоративную мобильную связь на сайте http://www.westek.ru/corportivnaya-mobilnaya-svyaz, чтобы быть постоянно на связи со всеми сотрудниками, централизовано оплачивать все мобильные счета персонала компании, избегая лишних хлопот. С корпоративной мобильной связью Вам больше не придется сталкиваться с блокировкой счета мобильного номера, не беспокоясь, что у сотрудников закончились деньги на счету.
В 2010 году была выпущена текущая версия C# 4.0. Ее главным дополнением к предыдущим версиям стали именованные и необязательные аргументы. Именованные дают возможность привязки аргумента и параметра по имени, а неименованные позволяют указать аргумент, который используется по умолчанию, для каждого параметра. Не менее важное новшество – тип dynamic. Он объявляет объекты, проверка на соответствие типов которых происходит не при компиляции, а непосредственно во время выполнения программы.
Другие важные средства C#, представленные в версии 4.0 значительно упрощают процесс создания программ. Правда, реализованы они не языком программирования, а средой Framework 4.0. Это библиотека распараллеливания задач (TPL) и параллельный вариант языка интегрированных запросов (PLNQ). Их поддержка позволяет осуществить параллельность выполнения кода в компьютерах с многоядерными процессорами или несколькими одно ядерными.
Комментирование и размещение ссылок запрещено.
delphi-box.ru
Сетевое программирование в Си-шарп
Несколько следующих уроков будут посвящены теме сетевого программирования. Это достаточно большая область программирования, и для начала ее освоения необходимо разобраться с базовыми понятиями и терминологией.Компьютерная сеть – это система компьютеров, или другого вычислительного оборудования, которые объединены между собой теми или иными каналами связи, и могут обмениваться между собой информацией.
Сети классифицируются по такому признаку как архитектура. Наиболее распространенная архитектура «клиент-сервер», о которой многие не раз уже слышали.
Рассмотрим аналогию архитектуры клиент-сервер в ситуации из жизни. Человек идет в магазине за хлебом. В данном случае клиентом выступает покупатель, который говорит, что хочет купить хлеб (запрашивает некий ресурс, услугу). Продавец в этой ситуации выступает сервером, который обрабатывает запрос (какой продукт, деньги заплатили, или нет), и выдает ответ (хлеб если заплатили, или до свидания). Покупателей много – клиентов, и всех обслуживает один продавец – сервер.
Физически клиентом и сервером могут выступать компьютеры и программное обеспечение. Обмен данными между клиентом и сервером осуществляется посредством сетевых протоколов (http, ftp, pop3, smtp, tcp, udp…).
Протокол – сводка правил и методов, по которым будут передаваться данные между узлами сети. Протокол обеспечивает способ передачи информации и обработку ошибок.
Протоколы делятся на уровни по своему назначению. В современных сетях используется так называемый стек протоколов TCP/IP. Он имеет 4 уровня. Стек означает то, что протокол, который располагается выше по уровню, не знает и не имеет необходимости знать, как именно осуществляется передача данных протоколом нижнего уровня, используя механизм инкапсуляции.
# | Уровень | Примеры протоколов |
---|---|---|
4 | Прикладной (Application layer) | HTTP, SMTP, FTP, DNS |
3 | Транспортный (Transport layer) | TCP, UDP |
2 | Сетевой (Internet layer) | IP |
1 | Канальный (Link layer) | Ethernet, IEEE 802.11 Wireless Ethernet |
Работу стека протоколов можно описать следующей ситуацией. Один начальник компании хочет передать посылку другому начальнику компании. Первый сообщает второму, что пришлет посылку, и второй одобряет. Эти договоренности начальников происходили посредством протокола наивысшего уровня в стеке. Дальше первый начальник сообщает секретарю, что надо сделать и этот секретарь связывается с секретарем второго начальника и говорит «ожидайте курьера, который доставит посылку». Общение секретарей было уже протоколом ниже в стеке. Дальше секретарь вызывает курьера и говорит, что и куда доставить, и тот уже на самом нижнем уровне стека осуществляет передачу данных. Добраться до второй компании он может разными способами — пешком, такси, на рабочем автомобиле. В этой ситуации секретарю (протоколу выше) без разницы, как доберется курьер до места назначения, также как и начальнику не нужно ничего знать про то, как секретари договорятся доставить посылку (может другим способом, не курьером). Это демонстрирует нам механизм инкапсуляции.
Если брать сеть Интернет (WWW), то в качестве клиента выступает веб-браузер, а сервером является веб-сервер. Веб-сервер — это компьютер, на котором установлено программное обеспечение, которое реализует необходимый серверный функционал. В интернете обмен данными происходит посредством протокола HTTP (HyperText Transfer Protocol) – протокол передачи гипертекста. Вы вводите в строке браузера имя страницы, браузер делает запрос к веб-серверу, веб-сервер обрабатывает запрос и возвращает страницу.
Электронная почта (email) – еще один способ передачи данных (электронных писем) между компьютерами, объединенными в сеть. Есть сервер электронной почты, и его клиенты. Когда клиент1 отправляет почту клиенту2, она посредством протокола SMTP отправляется на сервер. Клиент2 же получает почту с сервера используя протокол POP3.
Следующие несколько уроков будут посвящены работе в сети с протоколами прикладного уровня, что на данном этапе обучения будет наиболее полезно и актуально.
В платформе .Net для работы с сетью существует пространство имен System.Net;
Это пространство имен предоставляет классы для работы со многими протоколами передачи данных, классы описывающие запрос (WebRequest) к серверу, ответ (WebResponse), класс веб-клиента WebClient, который обеспечивает обмен данными с ресурсом, по заданному URI, классы IP адреса, авторизации, «куков» и многое другое. Более детально всё это будет рассмотрено в соответствующих уроках.
Сетевое программирование очень широкая тема, тут парочкой уроков не обойдешься, и всё я охватывать пока не собираюсь, но самое актуальное и необходимое будет рассмотрено.
mycsharp.ru