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
Получает стандартный выходной поток ошибок системы
Читает следующий символ из стандартного потока ввода.
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}
допустимо, пока имеется три аргумента. В этом случае
При описании некоторых различий между 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 получит имя первого указанного файла исходного кода. Фактически имя файла даже не связано с определениями любых классов, находящихся в файле. Класс