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

Программируем на C#

  Все выпуски  

Программируем на C# 0x000001 Variables


Информационный Канал Subscribe.Ru


Variables

# 0x00001

Как мне с помощью C# открывать/закрывать дверцу CD-ROM'а ?

Такие вопросы очень часто можно встретить в форумах.

На самом деле C#, как и любой другой язык не имеет никакого отношения к возможности открывать/закрывать CD-ROM, гашению экрана, или распечатки документа на принтере.

Любой процессор, или Арифметико-логическое Устройство (АЛУ), как видно из его названия, позволяет производить арифметические либо же логические операции над данными, (мы не будем брать в расчёт некоторые специфические команды процессоров, например: получение серийного номера и др.) команды "выключить клавиатуру" в процессоре нет. Как же тогда управляется работа всех устройств?

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

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

Как же организованы данные в C# ?

Переменные подразделяются на две категории - содержащие значение, содержащие ссылку (value types, reference types). Рассмотрим пример:

byte a,b; //value type

string S,s;//reference type

byte и string - зарезервированные слова, определяющие тип переменной, a и b - переменные типа "байт", S s - переменные типа "строка". Обратите внимание, что C# различает заглавные и прописные символы, S,s - две различные переменные.

Размер байта - 8 бит (на самом деле это не совсем так, размер зависит от разработчиков аппаратной части компьютера, однако наиболее часто встречаемое значение - 8 бит), 1 бит может принимать два значение (0 или 1), таким образом, 1 байт может принимать 2^8 (^ - степень) или 256 значений в диапазоне от 0 до 255. Переменные a,b имеют фиксированный размер, и всегда будут занимать в памяти компьютера по 1 байту каждая, чего не скажешь о переменных S,s рассмотрим пример:

a = 5;

b = 300; // ошибка компиляции

S = "11 символов"; 

s = "строка длиной в 27 символов";

С переменными a,b всё просто - они фиксированного размера, и если попытаться присвоить переменной значение, превышающее её размер, то компилятор выдаст сообщение об ошибке. Со строками всё иначе - размер присваиваемых данных заранее неизвестен и поэтому компилятор выполняет следующие действия - выделяет непрерывный участок памяти, достаточный чтобы поместить в него присваиваемое количество символов + 1 символ, и записывает в строковую переменную адрес начала этого участка. То есть переменная a хранит само значение, переменные S,s ссылку (reference) на это значение.

Возникает вопрос - а как узнать длину строки? Для этого и предназначен тот самый "+1 символ", нулевой символ (не путать с символом "0", нулевой символ на экране не отображается); То есть строка перебирается посимвольно от начала и до тех пор пока не встретится нулевой символ, что означает окончание строки.

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

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

Именно этот цикл идеально подходит для нашей задачи.

int index = 0;

while (s[index] != '/0') index++;

Console.WriteLine("длина строки s={0}",index);

При попытке выполнить такую программу нас ожидает ошибка выполнения (Run-time error), дело в том, что язык спроектирован так, чтобы обеспечить невозможность обращения к индексу большему, чем длина строки. Вообще в C# узнать длину строки гораздо проще -

index = s.Length;

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

using System;

 

class Variables

{

static void Main()

{

byte a,b;

string s,S;

 

a = 5;

//b = 300; // ошибка компиляции

S = "11 символов";

s = "строка длиной в 27 символов";

 

int index = 0;

try

{

while (s[index] !=љ '\0') index++;

}

catch (Exception e)//переменная типа Исключение

{

Console.WriteLine("длина строки s={0}",index);

Console.WriteLine(e.ToString());

}

 

index = s.Length;

Console.WriteLine("средствами C# длина строки s={0}", index);

 

object q1,q2,q3,q4,q5;

q1= "string";

q2 = true;

q3 = 100;

q4 = 2.2;

q5 = 758437653845;љљљљљљљљљљљљљљљљљљљљљљљљљљљљ

 
Console.WriteLine(q1.GetType());

Console.WriteLine(q2.GetType());

Console.WriteLine(q3.GetType());

Console.WriteLine(q4.GetType());

Console.WriteLine(q5.GetType());љљљљљљљљљљљљљљљљљ

Console.WriteLine("Press <Enter> ");

Console.ReadLine();

}

}

 

 

Небольшое пояснение:

директива Using означает подключения библиотеки.

System - библиотека в которой имеется функция Console.WriteLine

Console.WriteLine - ф-я для вывода данных в консоль.

class Variables - что это и зачем нужно мы поговорим в следующий раз

static void Main()љ - стартовая точка, именно отсюда начинается выполнение всех программ C#

блок try... catch... позволяет обрабатывать ошибки в подозрительных участках кода, именно с помощью него мы можем использовать наш алгоритм расчёта длины строки, без получения сообщения Windows - Ваша программа выполнила .......

object q1,q2,q3,q4,q5; - обратите внимание, что переменные данного типа могут быть строковыми, целочисленными, с плавающей точкой.... дело в том, что эти типы данных унаследованы от класса object, но об этом в следующий раз.

љљљљљљљљљљљ


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

В избранное