Pull to refresh

Учимся C#. Ведро второе.

Reading time 6 min
Views 28K

Результаты отзывов


Немного о C# и *nix


Многих заинтересовало, как же можно писать на C# в *nix системах. Попробую помочь нашим друзьям. Существует проект Mono и вот, что нам говорит Википедиа:
Mono — проект по созданию полноценного воплощения системы .NET на базе свободного программного обеспечения.
Mono включает компилятор языка C# — mcs, среду исполнения .NET — mono (с поддержкой JIT) и mint (без поддержки JIT), отладчик, а также ряд библиотек, включая реализацию ADO.NET и ASP.NET. В рамках проекта также разрабатываются привязки для графической системы GTK+ на платформу .NET.
Среда исполнения mono может исполнять модули, написанные на языках C#, Visual Basic .NET, Java, Boo, Nemerle, Python, JavaScript, PHP и Object Pascal (при наличии компилятора в среду .Net/Mono). Ожидается также поддержка языков C, Ada 2005 и Eiffel.
Реализации Mono существуют для следующих операционных систем: GNU/Linux, Solaris, Mac OS X, Microsoft Windows и Unix.

И это говорит нам о том, что мы спокойно можем программировать практически в любой ОС на C#. Последний релиз Mono Project — 2.2. Mono Project — здесь вы сможете загрузить самую последнюю версию, а так же посмотреть документацию.
Так же есть ещё одна хорошая новость. У группы разработчиков Mono есть дочерний проект — MonoDevelop. Это бесплатная IDE для C# и ASP.NET. Она поддерживает все необходимые функции для успешной и быстрой разработки в *nix системах.



Сосед мой — Друг мой


Так как по соседству пишутся статья о таких языках программирования, как Ruby и Python, то надо бы с соседями задружить.
IronRuby
IronRuby — реализация языка программирования Руби на платформе Microsoft .NET. Интерпретатор реализован на основе Dynamic Language Runtime, библиотеки, работающей на CLR 2.0, которая предоставляет, среди прочего, динамическую типизацию и динамическое определение методов.

IronPython
IronPython —— одна из основных реализаций языка Python, предназначенная для платформы Microsoft .NET или Mono. Полностью написан на C#, и является транслятором компилирующего типа.
В IronPython можно использовать типы .NET. Также можно из .NET код использовать IronPython код, либо посредством хостинга IronPython системы, либо предварительной сборки IronPython кода.

IronPython

А почитать?


Из книг для меня родной стала C# для профессионалов. Авторы: Симон Робинсон, Олди Корнес, Джей Глин, Бартон Харвей и др. Я начинал прямо с неё, но так, как у меня был опыт программирования и если у вас его нет, то рекомендую почитать C# Автор: Карли Ватсон.
C# Автор: Карли Ватсон.
C# для профессионалов. Авторы: Симон Робинсон и др.

А теперь продолжим…

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


Wikipedia
Тип данных (встречается также термин вид данных) — фундаментальное понятие теории программирования. Тип данных определяет 1) множество значений, 2) набор операций, которые можно применять к таким значениям и, возможно, 3) способ реализации хранения значений и выполнения операций. Любые данные, которыми оперируют программы, относятся к определённым типам.


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

Чтобы лучше понять, для чего они, то приведу пример. Тип это тот же сорт. Например сорт яблоков. Яблоко одного сорта может быть большой, содержать n железа и быть красным, а другого сорта быть маленьким и быть фиолетывым =)

С# также подразделяет типы на две другие категории: размерные и ссылочные.

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



Язык С# предоставляет программисту широкий спектр встроенных типов. Все они соответствуют CLS (Common Language Specification) и это гарантирует, что объекты, созданные на С#, могут успешно использоваться наряду с объектами, созданными на любом другом языке программирования, поддерживающем .NET. Каждый тип имеет строго заданный для него размер, который не может изменяться.
Давайте посмотри на таблицу встроенных типов:



В первом столбце идёт название типа, затем область значений (от скольки до скольки) и наконец размер.

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


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

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

Вы должны выполнить явное преобразование, используя оператор приведения:
  1. short х;
  2. int у - 5;
  3. х = (short)у; //А вот теперь всё ОК


Типы по ссылке


Тип Object


В C# тип object является исходным типом-предком для всех типов. Ссылку object можно использовать для привязки к любому объекту. Так же полезна в отражении, когда код должен работать с объектами тип которых не известен.
Object предоставляет нам несколько замечательных методов. Equals(), GetHashCode(), GetType() и ToString(). Эти методы доступны любому объекту и о них мы поговорим позднее.

Тип String


У C# имеется свой тип string. Поэтому такие операции как копирование и слияние происходит моментально.
  1. string s1 = "Здравствуй, ";
  2. string s2 = "Хабра";
  3. string s3 = "хабр!";
  4. string s4 = s2 + s1 + s3;
  5. Console.WriteLine(s4); // => Здравствуй, Хабрахабр!

Несмотря на то, что присвоение происходит в стиле типов по значению, тип System.String является типом по ссылке. К строкам мы ещё вернёмся!

Переменные


Переменная — это расположение в памяти объекта определенного типа. В приведенных выше примерах х и у — переменные. Переменные могут иметь значения, которыми они проинициализированы, или эти значения могут быть изменены программно.
Чтобы создать переменную, вы должны задать тип переменной и затем дать этому типу имя. Вы можете проинициализировать переменную во время ее объявления или присвоить ей новое значение во время выполнения программы. Вот пример программы, который в первом случае использует инициализацию для присвоения значения переменной, во втором случае использует присвоение значения переменной с помощью оператора «=»:
  1. class Variables
  2.   {
  3.     static void Main()
  4.     {
  5.       int myInt = 10;
  6.       System.Console.WriteLine("Инициализированная переменная myInt: " + myInt);
  7.       myInt = 5;
  8.       System.Console.WriteLine("Переменная myInt после присвоения значения: " + myInt);
  9.       Console.ReadLine();
  10.     }
  11.  
  12.   }

Результат работы этой программы будет следующий:
Инициализированная переменная mylnt: 10
myInt после присвоения значения: 5
Здесь строка:
int myInt = 10;
означает объявление и инициализацию переменной mylnt. Строка:
myInt= 5;
означает присвоение переменной mylnt значения 5.
С# требует определения значений, то есть переменные перед использованием должны быть инициализированы. Чтобы проверить это правило, рассмотрим следующий пример:
  1. class Variables
  2.   {
  3.     static void Main()
  4.     {
  5.       int myInt;
  6.       System.Console.WriteLine("Неинициализированная переменная myInt: " + myInt);
  7.       myInt = 5;
  8.       System.Console.WriteLine("После присвоения переменной myInt: " + myInt);
  9.  
  10.     }
  11.   }

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

А может попробуем?


Итак давайте напишем небольшую программу. Что она будет делать? Выводить краткое досье на человека:
  1. using System;
  2.  
  3. class First
  4. {
  5.   string country, city;
  6.   string name = "Вася Пупкин";
  7.   int old, num;
  8.   
  9.   old = 12;
  10.   num = 666;
  11.   country = "Russia";
  12.   city = "Наша";
  13.   
  14.   Console.WriteLine("Имя: " + name);
  15.   Console.WriteLine("Возраст: " + old);
  16.   Console.WriteLine("Локация проживания: " + country + city);
  17.   Console.WriteLine("/n/tСерийный номер: " + num);
  18.    Console.ReadLine();
  19. }


Сначало идёт объявление переменых и инициализация. Следом вывод этих переменых. На строке 17 вы встретили два новых символа для вас. Это /n и /t. Первый служит для перевода коретки на новую строку, а второй — знак табуляции. Ниже есть таблица символов, которые вы можете использовать.


На 18 строке мы добавили Console.ReadLine() — это сделано для того, чтобы после запуска программы консоль не закрывалась.

На сегодня всё.

P.S. Только что нашёл для кого-то возможно интересную ссылку.
C# для вундеркиндов. (MSDN)
Tags:
Hubs:
+43
Comments 58
Comments Comments 58

Articles