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

ЖАНРЫ

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

Ватсон Карли

Шрифт:
Открытые статические свойства (общие) Описание
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
.

SDK .NET поставляется вместе с компилятором, поэтому не нужно беспокоиться о получении специальных компиляторов для этого приложения. Откройте просто командную строку, перейдите в каталог, где сохранен файл

hello.cs
, и введите:

csc hello.cs

Файл будет компилирован в

hello.exe
. Хотя большинство программистов Java знакомы с этой формой низкоуровневой компиляции, важно заметить, что Visual Studio.NET предоставляет аналогичную функциональность, интегрированную в IDE. Например, изменение имени исполнимого файла можно легко выполнить, добавляя свойство имени сборки страницы свойств проекта. Чтобы сделать это производим щелчок правой кнопкой мыши на имени проекта в панели Solution Explorer и выбираем Properties или указываем Project в меню, в то время, когда имя проекта выделено, и выбираем пункт меню Properties. В папке Common Properties можно выбрать страницу General Properties и изменить свойство Assembly Name. Можно будет увидеть, что свойство для чтения Output File изменяется, отражая новое имя сборки.

Типы компиляции

Все файлы Java компилируются в файл байт-кода с расширением

.class
, который может выполниться виртуальной машиной. Внутри первого исходного кода необходимо предоставить соответствующую. Функциональность для создания того или иного типа приложения. Например, определенный ниже код будет создавать окно, аналогичное
Form
в Windows. Второй исходный файл
AddLib.java
является вспомогательным классом, используемым для выполнения сложения двух целых чисел. Можно заметить, что они включены в отдельные пакеты и
JavaFrame
импортирует класс
AddLib
. Пакеты и их эквивалент C# будут рассмотрены в следующем разделе:

Поделиться с друзьями: