Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

C+Sharp+and+.NET [CSharp & .NET] 2001.09.07


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

C Sharp and Dot NET

Содержание

  • 1. Вступление
  • 2. Шаг 2. синтаксис C# (часть [1/6])
    • 2.1. Строки
    • 2.2. Переменные
  • 3. Письма

1. Вступление

Платформа .NET позволяет создавать распределенные приложения.

Преимуществами распределенных приложений являются:

  1. возможность сконцентрировать в подходящих местах программный код, выполняющий специализированные задачи.
    Т.е. становится не нужно на каждой машине поддерживать программное обеспечение, выполняющее все функции
  2. разные платформы могут использовать один и тот же код за счет того, что это специализированное программное обеспечение имеет общеизвестный интерфейс.
    Например сотовые телефоны с их специализированным программно-аппаратным обеспечением могут использовать код web-серверов реализованных по-другому.
  3. Становится возможным предоставление платных услуг, например, вычислительных мощностей или информации.
    Здесь фирма предоставляющие услуги владеет одной частью системы, а пользователи - другой.

С точки зрения разработчика, платформа .NET это совокупность Common Language Runtime (CLR), .NET Framework Classes и высокоуровневых средств, таких как WinForms и Active Server Pages (ASP .NET)

Common Language Runtime управляет выполнением кода, написанного для платформы .NET, Framework Classes позволяют работать с операционной системой, WinForms нужны для создания пользовательского интерфейса, а ASP для формирования web-страниц.

Код для платформы может быть скомпилирован из исходных текстов, написанных на разных языках. Один из таких языков - C#.

[к содержанию]

2. Шаг 2. синтаксис C# (часть [1/6])

Принято начинать описание языка с примера Hello World. Можете посмотреть этот

Прежде всего, нужно сказать, что C# учитывает регистр идентификаторов. Компилятор выдаст ошибку, если, к примеру, написть слово Console с маленькой буквы.

Во-вторых, каждый оператор заканчивается точкой с запятой. Поэтому циклы нужно писать как минимум в две строки, а лучше всегда использовать составные операторы. Так

while (i < 10) SomeFunction();
OtherFunction();
менее читабельно, чем
while (i < 10)
{
    SomeFunction();
}

В C# не бывает операторов вне функций, а функций вне классов. Поэтому в примере описан класс World и функция Main. Выполнение программы начинается с метода Main одного из классов программы. Стоит обратить внимание на то, что Main пишется с заглавной (большой) буквы. Имя класса может отличаться от имени того файла, в котором класс находится.

Директивы using позволяют сократить имена идентификаторов из используемых библиотек. Так, например, объект Console на самом деле называется System.Console, но так как используется директива using, можно писать просто Console.

Комментарии в C# бывают нескольких видов:

  • до конца строки - //
  • многострочные - /* */
  • для документации - ///

2.1. Строки

В тексте программы не всегда можно написать все символы, поэтому те символы, которые нельзя написать непосредственно, заменяют на цепочки из других символов.

В C# есть два вида такой замены.

1. Использование замен при помощи символа \


Символ, который надо заменитьЦепочка
'\'
"\"
\\\
Звонок\a
Забой\b
Перевод страницы\f
Новая строка\n
Возврат каретки\r
Табуляция\t
Вертикальная табуляция\v
Символ Unicode, заданный своим номером, например \u200 \u
Символ Unicode, заданный своим номером в 16-ричной системе счисления, например \xc8\x
Символ с кодом ноль\0

2. Строки с удвоенными кавычками (как в ZX Spectrum)
Здесь нужно поставить перед строкой символ @ а затем удваивать кавычки внутри строки. Если такая строка занимает несколько строк программы, то будут сохранены символы перевода на новую строку и пробелы.

Пример: если нужно записать строку

C:\My Documents\
то можно писать так:
string path = "C:\\My Documents\\";
а можно - так:
string path = @"C:\MyDocuments\";

[к содержанию]

2.2. Переменные

переменные в C# обязательно имеют тип и могут содержать только объекты этого типа (и производных). Есть три вида переменных

  • значения
  • ссылки
  • указатели (это для специальных участков программы)

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

Ссылки непосредственно содержат данные, позволяющие определить местоположение значения. Таким образом могут существовать несколько переменных ссылочного типа, ссылающиеся на одно значение. Если изменить значение через одну переменную такого типа, то изменится значение для всех таких переменных.

[к содержанию]

Переменные-значения

Ключевые слова языка C# отображаются (отображаются - являются сокращениями для имен) на типы пакета System, поэтому во второй колонке приведены названия этих типов

тип C#тип из .Net FrameworkЗнаковый битСколько байтовГраничне значения
sbyteSystem.Sbyteесть1от -128 до 127
shortSystem.Int16есть2от -32768 до 32767
intSystem.Int32есть4от -2147483648 до 2147483647
longSystem.Int64есть8от -9223372036854775808 до 9223372036854775807
byteSystem.Byteнет1от 0 до 255
ushortSystem.Uint16нет2от 0 до 65535
uintSystem.UInt32нет4от 0 до 4294967295
ulongSystem.Uint64нет8от 0 до 18446744073709551615
floatSystem.Singleнет4Примерно от ±1.5 x 10-45 до ±3.4 x 1038 , 7 значащих цифр
doubleSystem.Doubleнет8Примерно от ±5.0 x 10-324 до ±1.7 x 10308 , 15 или 16 значащих цифр
decimalSystem.Decimalесть12Примерно от ±1.0 x 10-28 до ±7.9 x 1028 , 28 или 29 значащих цифр
charSystem.Charне применимо2любой символ Unicode (16-ти битный)
boolSystem.Booleanне применимо1 / 2true и false

Есть еще (immutable) класс string , объекты которого обязаны всегда создаваться заново, поэтому после выполнения кода

string s1 = "hello";
string s2 = s1;
s1 = "goodbye";
строка s1 будет равна "goodbye", а s2 - "hello"

[к содержанию]

Переменные - ссылки

Переменные этого вида на самом деле хранят адрес начала памяти, в которой находятся данные, на которые эти переменные ссылаются.

object x = new object();
x.myValue = 10;
object y = x;
y.myValue = 20; // после этого оператора x.myValue и y.myValue равняюся 20

Новые типы могут быть определены при помощи конструкций 'class', 'interface' и 'delegate'.

Boxing

C# позволяет преобразовывать переменные-значения в переменные-ссылки и обратно.

int i = 123;
object box = i;
if (box is int)
{
    Console.Write("Box contains an int"); // this line is printed
 i = (int)box;
}

[к содержанию]

3. Письма

Присылайте Ваши вопросы и ответы на адрес level3@mail.ru.

[к содержанию]

3.1. Native code

-----Original Message-----
From: Сергей Пацюк
Sent: Friday, September 07, 2001 9:21 PM
Subject: RE: О С#

Я тоже загорелся С#, но еще быстрее потух, когда не смог получить native-код. Спрашивается: зачем нужен язык, если его прогаммы нигде не работают, или тормозят при каждом запуске из-за jit-компиляции. Или Вы предлогаете таскать за своей прогой десятки метров инсталяшки Framework? Поиграться с этой штукой полезно, но для чего-то серьезного она пока не подходит.

А насчет С++. Так можно же придерживаться определенных правил и нет проблем. С++ имеет больше возможностей, а под .NET на нем накидать интерфейс или что-то еще не сложнее, чем на С#.

C# действительно хорош. Я согласен. Но EXE-шники эти на самом деле не EXE-шники. Они содержат инструкцию вызова функции _CorExeMain из mscore.dll, а все остальное и есть MSIL, который при запуске компилируется и исполняется (там еще есть проверка кода на опасные инструкции перед запуском, но я с этим еще не разбирался). В ассемблере я хорошо разбираюсь и смотрел эти "EXE-шники". Машинного кода там и близко нет. Это легко увидеть даже в Far'е.

Существует утилита предкомпиляции. Называется Native Image Generator (Ngen.exe)
Creates a native image from a managed assembly and installs it into the native image cache on the local machine. Running Ngen.exe on an assembly allows the assembly to load faster, because it restores code and data structures from the native image cache rather than generating them dynamically.

Он не создает полноценный ехе-шник. Машинный код там конечно есть, но он используется чтобы не компилировать каждый раз assembly. Скорость запуска программы это конечно повысит, но запускается-то все равно assembly. Представьте, что у вас в кеше много этих native-образов, ну несколько сотен. Каждый раз при запуске assembly, производится поиск соответствующего ему образа, и если он не найден, происходит компиляция. Опять тормоза. Сам native не запускается. Программа опять не переносится на другой комп. Да и потом, если много больших программ, для повышения скорости запуска, мы запускаем ngen для каждоко файлика этих программ. В результате сами assembly занимают много места, да еще их native-образы раза в два-три больше. Зачем это? Или у них на западе харды уже тысячами гигабайт измеряются?

Другими словами мне нужен полноценный компилятор. Тогда можно будет пересаживаться на .NET. а пока еще рано.

[SergeyR:
1. поиск - не замедляет (для поиска в кеше используют хеширование, деревья и т.п.)
2. для переноса на другую машину принято писать инсталляторы
3. иногда имеет смысл жертвовать производительностью, если это того стоит ;) ]

[к содержанию]


Хотите высказать свои мысли - пишите на адрес mailto:level3@mail.ru

С уважением и наилучшими пожеланиями,
Сергей Радкевич.


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу
Рейтингуется SpyLog

В избранное