/// <summary>
/// Преобразования типа с использованием метода Parse
/// </summary>
public void Parsing ()
{
//method Parse
Console.WriteLine("Введите целое");
string strdata = Console.ReadLine();
int intdata = int.Parse(strdata);
Console.WriteLine("Введите число с дробной частью и порядком");
strdata = Console.ReadLine();
double doubdata = double.Parse(strdata);
Console.WriteLine("intdata = {0}; doubdata = {1}",
intdata, doubdata);
}
//Parsing
Как видите, метод Parse с успехом заменяет соответствующий метод класса Convert.
На рис. 6.3 можно увидеть консольный вывод, полученный в результате работы процедуры Parsing.
Рис. 6.3. Результаты работы процедуры Parsing
Операция new
Пора вернуться к основной теме — операциям, допустимым в языке С#. Последней из еще не рассмотренных операций высшего уровня приоритета является операция new. Ключевое слово new используется в двух контекстах — как модификатор и как операция в инициализирующих выражениях объявителя. Во втором случае результатом выполнения операции new является создание нового объекта и вызов соответствующего конструктора. Примеров подобного использования операции new было приведено достаточно много, в том числе и в этой лекции.
Арифметические операции
В языке 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, у =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 истинно. Для типов с плавающей точкой выполнение точного равенства х = х/у*у следует считать скорее случайным, а не закономерным событием. Законно невыполнение этого равенства, как это имеет место при вычислениях с фиксированной точкой.
Операции отношения
Операции отношения можно просто перечислить — в объяснениях они не нуждаются. Всего операций 6 (==, =, <, >, <=, >=). Для тех, кто не привык работать с языком C++, стоит обратить внимание на запись операций "равно" и "не равно".
Операции проверки типов
Операции проверки типов is и as будут рассмотрены в последующих лекциях, (см. лекцию 19).
Операции сдвига
Операции сдвига вправо "<<" и сдвига влево "<<" в обычных вычислениях применяются редко. Они особенно полезны, если данные рассматриваются как строка битов. Результатом операции является сдвиг строки битов влево или вправо на к разрядов. В применении к обычным целым положительным числам сдвиг вправо равносилен делению нацело на 2К, а сдвиг влево — умножению на 2К. Для отрицательных чисел сдвиг влево и деление дают разные результаты, отличающиеся на единицу. В языке C# операции сдвига определены только для некоторых целочисленных типов — int, uint, long, ulong. Величина сдвига должна иметь тип int. Вот пример применения этих операций:
/// <summary>
/// операции сдвига
/// </summary> public void Shift()
{
int n = 17,m =3, p,q;
p= n>>2; q = m<<2;
Console.WriteLine("n= " + n + m= " + m + p=n>>2 = "+p
+ q=m<<2 " + q);
long x=-75, у =-333, u,v,w;