Чтение онлайн

на главную

Жанры

C# для профессионалов. Том II

Ватсон Карли

Шрифт:
Массивы

C# поддерживает "неровные" массивы и добавляет многомерные массивы. Может сбить с толку то, что Java не делает между ними различий:

int [] х = new int[20]; // как в Java, только [] должны следовать

// за типом

int [,] у = new int[12, 3]; // то же самое, что int у[] [] = new

// int[12][3];

int[][] z = new int[5][]; // то же самое, что и int x[][] = new

// int [5][];

Примечание.

Ключевое слово
int[]
обозначает реальный тип данных, поэтому синтаксически оно записывается таким образом. Нельзя, как в Java, поместить двойные скобки перед или после переменной. Прежде чем перейти к дополнительным деталям о ссылочных типах и обсуждению таких концепции, как классы, давайте поговорим немного об операциях. Следующий раздел посвящен операторам.

Операторы

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

Присваивание

C# и Java используют знак

=
для присваивания значений переменным. В C#, как и в Java, переменные присвоенные объектам содержат только ссылку или "адрес" на этот объект, а не сам объект. Присваивание одной ссылочной переменной другой таким образом просто копирует "адрес" в новую переменную. Следовательно обе переменные теперь имеют возможность делать ссылку на один объект. Эту концепцию легко проиллюстрировать с помощью примера. Рассмотрим класс
ExOperators
, приведенный ниже:

public class EXOperators {

 internal int р;

 public EXOperators {}

 public static void Main {

ExOperators one = new EXOperators;

one.p = 200;

EXOperators two;

two = one;

two.p = 100;

Console.WriteLine(two.p);

Console.WriteLine(one.p);

 }

}

Пока проигнорируем ключевое слово

internal
перед переменной
р
. Оно является модификатором доступа, который будет рассмотрен далее в этой главе. Достаточно сказать, что оно делает переменную
р
видимой для метода
Main
. Приведенный выше пример создает экземпляр объекта
EXOperators
и сохраняет его в локальной переменной
one
. Эта переменная затем присваивается другой переменной —
two
. После этого значение
p
в объекте, на который ссылается
two
, изменяется на 100. В конце выводится значение переменной
p
в обоих объектах. Компиляция и выполнение этого даст результат 100
дважды, указывая, что изменение
two.р
было тем же самым, что изменение значения
one.р
.

Сравнение

Операторы сравнения обычно совпадают по форме и функциональности в обоих языках. Четырьмя основными операторами являются

<
— меньше, чем,
>
— больше, чем,
<=
— меньше или равно и
>=
— больше или равно.

Чтобы определить, принадлежит ли объект заданному классу или любому из классов предков, Java использует оператор

instanceof
. Простой пример этого приведен в листинге ниже:

String у = "a string";

Object х = у;

if (х instanceof String) {

 System.out.println("х is a string");

}

В C# эквивалентом

instanceof
является оператор
is
. Он возвращает
true
, если тип времени выполнения заданного класса совместим с указанным типом. Версия C# приведенного выше кода будет иметь следующую форму:

string у = "a string";

object х = у;

if (х is System.String) {

 System.Console.WriteLine("x is a string");

}

Операторы равенства aрифметические, условные, побитовые, битового дополнения и сдвига

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

Преобразование типов

Преобразование в Java состоит из неявного или явного сужения или расширения преобразования типа при использовании оператора

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

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

Упаковка объекта означает неявное преобразование любого типа значения в объектный тип. Экземпляр объекта создается и выделяется, а значение из типа значения копируется в новый объект. Здесь приведен пример, показывающий, как упаковка работает в C#:

// BoxEx.cs

public class OverflowEX {

 public static void Main(String[] args) {

int x = 10;

Object obj = (Object)x;

Console.WriteLine(obj);

Поделиться:
Популярные книги

Неудержимый. Книга XII

Боярский Андрей
12. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XII

Мастер 5

Чащин Валерий
5. Мастер
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Мастер 5

Идущий в тени 5

Амврелий Марк
5. Идущий в тени
Фантастика:
фэнтези
рпг
5.50
рейтинг книги
Идущий в тени 5

Три `Д` для миллиардера. Свадебный салон

Тоцка Тала
Любовные романы:
современные любовные романы
короткие любовные романы
7.14
рейтинг книги
Три `Д` для миллиардера. Свадебный салон

Проклятый Лекарь. Род II

Скабер Артемий
2. Каратель
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Проклятый Лекарь. Род II

Вальдиры миры. Кроу-3

Михайлов Дем Алексеевич
3. Кроу
Фантастика:
фэнтези
рпг
8.38
рейтинг книги
Вальдиры миры. Кроу-3

Новый Рал 8

Северный Лис
8. Рал!
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Новый Рал 8

Приручитель женщин-монстров. Том 7

Дорничев Дмитрий
7. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 7

Системный Нуб

Тактарин Ринат
1. Ловец душ
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Системный Нуб

Объединитель

Астахов Евгений Евгеньевич
8. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Объединитель

Жребий некроманта. Надежда рода

Решетов Евгений Валерьевич
1. Жребий некроманта
Фантастика:
фэнтези
попаданцы
6.50
рейтинг книги
Жребий некроманта. Надежда рода

Мимик нового Мира 7

Северный Лис
6. Мимик!
Фантастика:
юмористическое фэнтези
постапокалипсис
рпг
5.00
рейтинг книги
Мимик нового Мира 7

Академия

Кондакова Анна
2. Клан Волка
Фантастика:
боевая фантастика
5.40
рейтинг книги
Академия

Приручитель женщин-монстров. Том 2

Дорничев Дмитрий
2. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 2