умолчанию задается как стандартный поток ввода системы. | |
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}.
One day'
+ 'while {2}, He came across a (3).
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