Результаты отзывов
Немного о 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. Каждый тип имеет строго заданный для него размер, который не может изменяться.
Давайте посмотри на таблицу встроенных типов:
![](http://lh3.ggpht.com/_VpmA0vzVpaw/SXN3ebZqqgI/AAAAAAAAATI/MQGUAKaOc5Q/s144/tape.gif)
В первом столбце идёт название типа, затем область значений (от скольки до скольки) и наконец размер.
Преобразование встроенных типов
Объекты одного типа могут быть преобразованы в объекты другого типа неявно или явно. Неявные преобразования происходят автоматически, компилятор делает это вместо вас. Явные преобразования осуществляются, когда вы «приводите» значение к другому типу. Неявные преобразования гарантируют также, что данные не будут потеряны. Например, вы можете неявно приводить от short (2 байта) к int (4 байта).
Опять таки небольшой пример. Пусть у нас есть ведро и чашка. =) Если мы воду из чашки перельем в ведро, то получится «неявное преобразование», а если из ведра в чашку, то только «явно». А как это возможно? Просто у нас вся остальная вода выльется.
Независимо от того, какой значение находится в short, оно не потеряется при преобразовании к int:
- short x = 1;
- int у = х; //неявное преобразование
Если вы делаете обратное преобразование, то, конечно же, можете потерять информацию. Если значение в int больше, чем 32.767, оно будет усечено при преобразовании. Компилятор не станет выполнять неявное преобразование от int к short:
- short х;
- int у = 5;
- х = у; //не скомпилируете
Вы должны выполнить явное преобразование, используя оператор приведения:
- short х;
- int у - 5;
- х = (short)у; //А вот теперь всё ОК
Типы по ссылке
Тип Object
В C# тип object является исходным типом-предком для всех типов. Ссылку object можно использовать для привязки к любому объекту. Так же полезна в отражении, когда код должен работать с объектами тип которых не известен.
Object предоставляет нам несколько замечательных методов. Equals(), GetHashCode(), GetType() и ToString(). Эти методы доступны любому объекту и о них мы поговорим позднее.
Тип String
У C# имеется свой тип string. Поэтому такие операции как копирование и слияние происходит моментально.
- string s1 = "Здравствуй, ";
- string s2 = "Хабра";
- string s3 = "хабр!";
- string s4 = s2 + s1 + s3;
- Console.WriteLine(s4); // => Здравствуй, Хабрахабр!
Несмотря на то, что присвоение происходит в стиле типов по значению, тип System.String является типом по ссылке. К строкам мы ещё вернёмся!
Переменные
Переменная — это расположение в памяти объекта определенного типа. В приведенных выше примерах х и у — переменные. Переменные могут иметь значения, которыми они проинициализированы, или эти значения могут быть изменены программно.
Чтобы создать переменную, вы должны задать тип переменной и затем дать этому типу имя. Вы можете проинициализировать переменную во время ее объявления или присвоить ей новое значение во время выполнения программы. Вот пример программы, который в первом случае использует инициализацию для присвоения значения переменной, во втором случае использует присвоение значения переменной с помощью оператора «=»:
- class Variables
- {
- static void Main()
- {
- int myInt = 10;
- System.Console.WriteLine("Инициализированная переменная myInt: " + myInt);
- myInt = 5;
- System.Console.WriteLine("Переменная myInt после присвоения значения: " + 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: " + myInt);
- myInt = 5;
- System.Console.WriteLine("После присвоения переменной myInt: " + myInt);
-
- }
- }
Если вы попробуете скомпилировать этот пример, компилятор отобразит следующее сообщение об ошибке:
error CS3165: Use of unassigned local variable 'mylnt'
Нельзя использовать неинициализированную переменную в С#!
А может попробуем?
Итак давайте напишем небольшую программу. Что она будет делать? Выводить краткое досье на человека:
- using System;
-
- class First
- {
- string country, city;
- string name = "Вася Пупкин";
- int old, num;
-
- old = 12;
- num = 666;
- country = "Russia";
- city = "Наша";
-
- Console.WriteLine("Имя: " + name);
- Console.WriteLine("Возраст: " + old);
- Console.WriteLine("Локация проживания: " + country + city);
- Console.WriteLine("/n/tСерийный номер: " + num);
- Console.ReadLine();
- }
Сначало идёт объявление переменых и инициализация. Следом вывод этих переменых. На строке 17 вы встретили два новых символа для вас. Это /n и /t. Первый служит для перевода коретки на новую строку, а второй — знак табуляции. Ниже есть таблица символов, которые вы можете использовать.
![](http://lh6.ggpht.com/_VpmA0vzVpaw/SXOGCKRmrDI/AAAAAAAAATQ/ShSyKtpUssk/s400/chars.gif)
На 18 строке мы добавили Console.ReadLine() — это сделано для того, чтобы после запуска программы консоль не закрывалась.
На сегодня всё.
P.S. Только что нашёл для кого-то возможно интересную ссылку.
C# для вундеркиндов. (MSDN)