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

на главную

Жанры

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

Ватсон Карли

Шрифт:

// JavaEcho.java

import java.io.*;

public class JavaEcho {

 public static void main(String[] args) throws IOException {

BufferedReader stdin = new BufferedReader(new InputSreamReader(System.in));

String userInput = stdin.readLine;

System.out.println("You said: " + userInput);

 }

}

Класс

System.Console
предоставляет методы в C#, которые дают аналогичную функциональность для чтения и записи из и в командную строку, Нет необходимости в каких-либо дополнительных объектах, класс
Console
предоставляет методы, которые могут читать целые строки, читать символ за символом и даже показывать описанный выше поток, из которого выполняется чтение.
Важно отметить, что эту функциональность дает
System.Console
без создания экземпляра объекта
Console
. Фактически можно обнаружить, что невозможно создать экземпляр объекта
Console
. Члены класса
Console
кратко описаны в таблицах ниже:

Открытые статические свойства (общие) Описание
Error
Получает стандартный выходной поток ошибок системы
In
Получает стандартный входной поток ошибок системы
Out
Получает стандартный поток вывода системы
Открытые статические методы (общие) Описание
OpenStandardError
Перезагруженный. Возвращает стандартный поток ошибок.
OpenStandardInput
Перезагруженный. Возвращает стандартный поток ввода.
OpenStandardOutput
Перезагруженный. Возвращает стандартный поток вывода.
Read
Читает следующий символ из стандартного потока ввода.
ReadLine
Читает следующую строку символов из
Console.In
, который по умолчанию задается как стандартный поток ввода системы.
SetError
Перенаправляет свойство
Error
для использования указанного потока
TextWriter
.
SetIn
Перенаправляет свойство
In
для использования указанного потока
TextReader
.
SetOut
Перенаправляет свойство
Out
для использования указанного потока
TextWriter
.
Write
Перезагруженный. Записывает указанную информацию в
Console.Out
.
WriteLine
Перезагруженный. Записывает информацию, за которой следует конец строки в
Console.Out
.

Как можно видеть, все члены

Console
являются статическими.
static
является примером модификатора C#. Он обладает тем же значением, что и его аналог в Java, т.е. делает указанную переменную или метод принадлежащим всему классу, а не одному какому-то экземпляру класса. Мы обсудим модификаторы более подробно позже в этом приложении.

С помощью мощных методов из класса

Console
можно записать эквивалент класса
JavaEcho
на C# следующим образом:

class CSEchoer {

 static void Main(string[] args) {

string userInput = System.Console.ReadLine;

System.Console.WriteLine("You said : " + userInput);

 }

}

Приведенный выше код значительно короче и легче, чем его аналог на Java. Статический метод

Console.WriteLine
предоставляет одну полезную вещь, а именно, возможность использовать форматированные строки. Гибкость форматированных строк может быть проиллюстрирована написанием простой игры, где ввод пользователя применяется для создания рассказа. Код
EchoGame
представлен ниже:

class EchoGame {

 static void Main(string[] args) {

System.Console.WriteLine("Once upon a time in a far away" + "?");

string userInput1 = System.Console.ReadLine;

System.Console.WriteLine("a young prince ?");

string userInput2 = System.Console.ReadLine;

System.Console.WriteLine("One day while?");

string userInput3 ? System.Console.ReadLine;

System.Console.WriteLine("He came across a ?");

string userInput4 = System.ConsoleReadLine;

System.Console.WriteLine("The prince ?");

String userInput5 = System.Console.ReadLine;

System.Console.WriteLine("Once upon a time in a far away"

+ " {0}, a young prince {1}. \n One day"

+ "while {2}, He came across a (3). \n The "

+ "prince {4} ! ", userInput1, userInput2,

userInput3, userInput4, userInput5);

 }

}

Точки

вставки заменяются предоставленными аргументами, начиная с индекса
{0}
, который соответствует самой левой переменной (в данном случае
userInput1
). Можно подставлять не только строковые переменные, и не обязательно использовать только переменные или переменные одного типа. Любой тип данных, который может вывести метод
WriteLine
, допустим в качестве аргумента, включая строковые литералы или реальные значения. Не существует также ограничений на число точек вставки, которые могут добавляться к строке, пока их не больше общего числа аргументов. Отметим, что исключение точек вставки из строки приведет к тому, что переменные не будут выводиться. Необходимо, однако, иметь аргумент для каждой определенной точки вставки, индекс которой в списке аргументов соответствует индексу точки вставки. В следующем листинге, например, удаление
{1}
допустимо, пока имеется три аргумента. В этом случае
{0}
соответствует
strA
и
{2}
соответствует
strC
:

Console.WriteLine("hello {0} {1} {2}", strA, strB, strC);

Компиляция

При описании некоторых различий между JRE Java и CLR C# кратко упоминались некоторые детали того, как написанный на соответствующем языке код компилируется и выполняется. Хотя код обоих языков компилируется в некоторую промежуточную форму, байт-код версии Java никогда не компилируется повторно в собственные инструкции машины (если только не используется компилятор в собственный код). Вместо этого байт-код требует для выполнения среду времени выполнения, и в частности, виртуальную машину. Имя компилированного файла связано с именем файла, в котором находится исходный код, который в свою очередь связан с именем открытого класса в этом файле. В случае определения нескольких классов в одном файле каждое определение класса будет создавать файл класса, который соответствует имени определенного класса. Например, возьмем исходный файл

Test.java
со следующим кодом:

// Test.java

class x {}

class у {}

class z {}

Компиляция этого файла будет создавать три файла классов:

х.class
,
у.class
,
z.class
. Один (и только один для каждого исходного файла) из этих классов может быть объявлен открытым следующим образом:

// Test.java

public class x {}

class у {}

class z {}

В приведенном выше примере имя исходного файла

Test.java
должно быть изменено, чтобы соответствовать имени находящегося в нем открытого класса.
Test.java
поэтому станет
х.java
, чтобы код компилировался.

В противоположность этому, компилированный в IL код C# выполняется VES (Virtual Execution System), которая предоставляет поддержку для IL, загружая управляемый код, и JITters (которые преобразуют управляемый код в форме промежуточного языка в собственный код машины). Имя файла

Hello.cs
не связано с именем конечного исполняемого файла и может изменяться во время компиляции с помощью ключа
/out
. Если имя файла вывода не определено, то exe получит имя того файла исходного кода, который содержит метод
main
, a DLL получит имя первого указанного файла исходного кода. Фактически имя файла даже не связано с определениями любых классов, находящихся в файле. Класс
Hello
может быть определен в файле
Goodbу.cs
, который компилируется в несвязанный
MisterHanky.exe
.

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

Огненный князь 2

Машуков Тимур
2. Багряный восход
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Огненный князь 2

Аномальный наследник. Том 1 и Том 2

Тарс Элиан
1. Аномальный наследник
Фантастика:
боевая фантастика
альтернативная история
8.50
рейтинг книги
Аномальный наследник. Том 1 и Том 2

Законы Рода. Том 5

Flow Ascold
5. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 5

Хозяйка лавандовой долины

Скор Элен
2. Хозяйка своей судьбы
Любовные романы:
любовно-фантастические романы
6.25
рейтинг книги
Хозяйка лавандовой долины

Курсант: Назад в СССР 7

Дамиров Рафаэль
7. Курсант
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Курсант: Назад в СССР 7

Последняя Арена 7

Греков Сергей
7. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 7

Александр Агренев. Трилогия

Кулаков Алексей Иванович
Александр Агренев
Фантастика:
альтернативная история
9.17
рейтинг книги
Александр Агренев. Трилогия

Архил...? Книга 2

Кожевников Павел
2. Архил...?
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Архил...? Книга 2

Эфир. Терра 13. #2

Скабер Артемий
2. Совет Видящих
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эфир. Терра 13. #2

Решала

Иванов Дмитрий
10. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Решала

Черный маг императора 2

Герда Александр
2. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
6.00
рейтинг книги
Черный маг императора 2

Темный Лекарь 5

Токсик Саша
5. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь 5

Не грози Дубровскому! Том Х

Панарин Антон
10. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том Х

Мастер Разума III

Кронос Александр
3. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
5.25
рейтинг книги
Мастер Разума III