Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
otvety_po_pyavu.doc
Скачиваний:
2
Добавлен:
23.09.2019
Размер:
4.01 Mб
Скачать

Объявление строк. Конструкторы класса string

Объекты класса String объявляются как все прочие объекты простых типов - с явной или отложенной инициализацией, с явным или неявным вызовом конструктора класса. Чаще всего, при объявлении строковой переменной конструктор явно не вызывается, а инициализация задается строковой константой. Но у класса String достаточно много конструкторов. Они позволяют сконструировать строку из:

  • символа, повторенного заданное число раз;

  • массива символов char[];

  • части массива символов.

Некоторым конструкторам в качестве параметра инициализации можно передать строку, заданную типом char*. Но все это небезопасно, и подобные примеры приводиться и обсуждаться не будут. Приведу примеры объявления строк с вызовом разных конструкторов:

Операции над строками

Над строками определены следующие операции:

присваивание (=);

две операции проверки эквивалентности (==) и (!=);

конкатенация или сцепление строк (+);

взятие индекса ([]).

  1. Оператор присваивания. Явное и неявное преобразование типов данных при присваивании в C#.

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

Например, переменная типа longl (8-байтное целое) может хранить любое значение, которое может хранить int (4 байта в 32-разрядном компьютере). В следующем примере компилятор неявно преобразует значение справа в тип long перед присвоением его типу bigNum.

Язык C#

// Implicit conversion. num long can

// hold any value an int can hold, and more!

int num = 2147483647;

long bigNum = num;

Полный список всех неявных числовых преобразований см. в разделе Таблица неявных числовых преобразований (Справочник по C#).

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

Копировать код

Derived d = new Derived();

Base b = d; // Always OK.

Явные преобразования (приведения). Для явных преобразований необходим оператор приведения. Исходная переменная и переменная назначения совместимы, но имеется риск потери данных, поскольку тип переменной назначения имеет меньший размер, чем у исходной переменной (или является базовым классом исходной переменной).

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

Язык C#

Копировать код

class Test

{

static void Main()

{

double x = 1234.7;

int a;

// Cast double to int.

a = (int)x;

System.Console.WriteLine(a);

}

}

// Output: 1234

Для ссылочных типов явное приведение необходимо, если нужно выполнить преобразование из базового типа в производный тип:

Giraffe g = new Giraffe();

Animal a = g;

Giraffe g2 = (Giraffe) a;

  1. Арифметические выражения в C#. Целочисленные выражения и выражения с плавающей точкой. Порядок выполнения операций.

В языке C# имеются обычные для всех языков арифметические операции - "+, -, *, /, %". Все они перегружены. Операции "+" и "-" могут быть унарными и бинарными. Операция деления "/" над целыми типами осуществляет деление нацело, для типов с плавающей и фиксированной точкой - обычное деление. Операция "%" определена над всеми арифметическими типами и возвращает остаток от деления нацело. Тип результата зависит от типов операндов. Приведу пример вычислений с различными арифметическими типами:

/// <summary>

/// Арифметические операции

/// </summary>

public void Ariphmetica()

{

int n = 7,m =3, p,q;

p= n/m; q= p*m + n%m;

if (q==n) Console.WriteLine("q=n");

else Console.WriteLine("q!=n");

double x=7, y =3, u,v,w;

u = x/y; v= u*y;

w= x%y;

if (v==x) Console.WriteLine("v=x");

else Console.WriteLine("v!=x");

decimal d1=7, d2 =3, d3,d4,d5;

d3 = d1/d2; d4= d3*d2;

d5= d1%d2;

if (d4==d1) Console.WriteLine("d4=d1");

else Console.WriteLine("d4!=d1");

}//Ariphmetica

При проведении вычислений в двух первых случаях проверяемое условие оказалось истинным, в третьем - ложным. Для целых типов можно исходить из того, что равенство n = n/m*m + n%m истинно. Для типов с плавающей точкой выполнение точного равенства x = x/y*y следует считать скорее случайным, а не закономерным событием. Законно невыполнение этого равенства, как это имеет место при вычислениях с фиксированной точкой.

Порядок вычислений.

  1. если выражение содержит подвыражение в скобках, то это подвыражение вычисляется первым;

  2. если выражение содержит операции умножения (*) или деления (/б div, mod), то эти операции выполняются слева направо;

  3. если выражение содержит операции сложения (+) и вычитания (-), они выполняются также слева направо.

Можно записывать арифметические операции в сокращенной форме: с+=3(с=с+3).

  1. Условные алгоритмы. Условный оператор if в C#. Примеры использования.

  1. Циклические алгоритмы. Оператор цикла for в C#. Примеры использования.

  1. Циклические алгоритмы. Оператор цикла while в C#. Примеры использования.

  1. Понятие метода в C#. Формальные и фактические параметры. Способы передачи параметров.

Ме́тод (от греч. μέθοδος — «способ») — систематизированная совокупность шагов, действий, которые необходимо предпринять, чтобы решить определенную задачу или достичь определенной цели.

Формальные параметры являются идентификаторами, объявленными в списке формальных параметров процедуры. Они соответствуют фактическим параметрам, специфицированным в вызове процедуры. Это соответствие устанавливается, когда происходит вызов процедуры. Имеется два вида параметров, параметры значения и переменные, указанные в списке формальных параметров с помощью отсутствия или наличия ключевого слова var. Параметры значения являются локальными переменными, которым присваивается в качестве начальных значения соответствующих фактических параметров. Параметры переменные соответствуют фактическим параметрам, являющимся переменными, и они означают эти переменные. Область действия формального параметра простирается от его объявления до конца блока процедуры, в которой он объявлен. Процедура функция без параметров должна иметь пустой список параметров. Она должна вызываться обозначением функции, список фактических параметров которого также пуст.

Необходимо соблюдать строгое соответствие между формальными и фактическими параметрами по их количеству, типам и порядку следования в списке. Формальным параметром может быть ТОЛЬКО переменная, тип которой обязательно указывается в заголовке описания функции или процедуры. Если формальных параметров несколько и они имеют один и тот же тип, то их удобно объединить в группу: <имя> , <имя> ,┘, <имя> : <тип>; Если в списке формальных параметров несколько подобных групп, эти группы отделяются друг от друга точкой с запятой. Фактическим параметром может быть константа, переменная или выражение (в последнем случае вычисляется результат выражения, который и ставится в соответствие формальному параметру). Фактический параметр обязательно должен совпадать по типу с соответствующим ему формальным. Формальные и фактические параметры Формальные параметры подпрограммы указывают, с какими параметрами следует обращаться к этой программе (количество примеров, их последовательность, типы). Они задаются в заголовке подпрограммы в виде списка формальных параметров, разбитого на группу формальных параметров включаются однотипные параметры одной категории. Все формальные параметры можно разбить на четыре категории: •    параметры значения (эти параметры в основной программе подпрограммой не меняются ); •    параметры - переменные ( эти параметры подпрограмма может изменить в основной программе ); •    параметры-константы ( используются только в версии 7.0); •    параметры-процедуры и параметры-функции (т.е. процедурного типа). Для каждого формального параметра следует указать имя и, как правило, тип, а в случае параметра-переменной или параметра-константы - его категорию. Имена параметров могут быть любыми, в том числе и совпадать с именами объектов программы. Необходимо лишь помнить, что в этом случае параметр основной программы с таким именем становится недостурным для непосредственного использования подпрограммой. Тип формального параметра может быть практически любым, однако в заголовке подпрограммы нельзя вводить новый тип. Например, нельзя писать function Max( A: array[ 1..100 ] of real ): real; Чтобы правильно записать этот заголовок, следует в основной программе ввести тип-массив, а затем использовать его в заголовке: type tArr =array [ 1..100 ] of real; function Max ( A: tArr ) : real; 17. Одномерные массивы в C#. Способы объявления и использования. Доступ к элементам массива.

  1. Двумерные прямоугольные массивы в C#. Способы объявления и использования. Доступ к элементам массива.

  1. Понятие потока. Система ввода-вывода в C#.

В общем случае понятие ПОТОК — это абстрактное понятие, которое обозначает динамическую изменяющуюся во времени последовательность чего-либо.

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

Система ввода/вывода обеспечивает для программиста стандартные и не зависящие от физического устройства средства представления информации и управления потоками ввода/вывода. Действия по организации ввода/вывода обеспечиваются стандартными наборами, как правило, одноименных функций ввода/вывода со стандартным интерфейсом.

Функции, обеспечивающие взаимодействие с различными устройствами ввода/вывода, объявляются в различных классах. Вопрос "ОТКУДА ВЫЗВАТЬ функцию" часто становится более важным, чем вопрос "КАК ПОСТРОИТЬ выражение вызова функции".

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]