C# Programming Guide
This section provides detailed information on key C# language features and features accessible to C# through the .NET Framework.
Inside a C# Program
The section discusses the general structure of a C# program, and includes the standard "Hello, World!" example.
Hello World -- Your First Program
The following console program is the C# version of the traditional "Hello World!" program, which displays the string Hello World!.
using System;
// A "Hello World!" program in C#
namespace HelloWorld
{
class Hello
{
static void Main()
{
System.Console.WriteLine("Hello World!");
}
}
}
|
Let us now examine the important parts of this program in turn.
Comments
The first line contains a comment:
// A "Hello World!" program in C#
|
The characters // convert the rest of the line to a comment. You can also comment a block of text by enclosing it between the /* and */ characters, for example:
/* A "Hello World!" program in C#.
This program displays the string "Hello World!" on the screen. */
|
Руководство по программированию на C#
В этом разделе представлены подробные сведения об основных возможностях языка C#, а также о функциях, доступных в этом языке благодаря платформе .NET Framework.
Структура программы C#
В данном разделе рассматривается общая структура программы C# и приведен стандартный пример "Здравствуй, мир!".
Hello World – Создаем первую программу
Следующая консольная программа – это версия традиционной программы "Hello World!" на языке C#, которая выводит на экран строку Hello World!.
---
Давайте разберем важные части этой программы по порядку.
Комментарии
Первая строка содержит комментарий.
// A "Hello World!" program in C#
|
Символы // преобразуют остальную часть строки в комментарий. Можно также написать комментарий к блоку текста, окружив его символами /* и */, например:
/* A "Hello World!" program in C#.
This program displays the string "Hello World!" on the screen. */
|
The Main Method
The C# program must contain a Main method, in which control starts and ends. The Main method is where you create objects and execute other methods.
The Main method is a static method that resides inside a class or a struct. In the previous "Hello World!" example, it resides in a class named Hello. Declare the Main method in one of the following ways:
-
It can return void:
static void Main()
{
//...
}
|
-
It can also return an int:
static int Main()
{
//...
return 0;
}
|
-
With both of the return types, it can take arguments:
static void Main(string[] args)
{
//...
}
|
-or-
static int Main(string[] args)
{
//...
return 0;
}
|
The parameter of the Main method is a string array that represents the command-line arguments used to invoke the program. Notice that, unlike C++, this array does not include the name of the executable (exe) file.
Метод Main
В программе на C# должен присутствовать метод Main, в котором начинается и заканчивается управление. В методе Main создаются объекты и выполняются другие методы.
Метод Main является статическим методом, расположенным внутри класса или структуры. В предыдущем примере "Hello World!" он расположен в классе с именем Hello. Метод Main можно объявить одним из следующих способов:
-
Он возвращает значение void:
static void Main()
{
//...
}
|
-
Он также может возвращать значение типа int:
static int Main()
{
//...
return 0;
}
|
|
-
С обоими возвращаемыми типами он может принимать следующие аргументы.
static void Main(string[] args)
{
//...
}
|
–или–
static int Main(string[] args)
{
//...
return 0;
}
|
Параметр метода Main является массивом значений типа string, представляющим аргументы командной строки, используемые для вызова программы. Обратите внимание, что в отличие от C++, массив не содержит исполняемого (EXE) файла.
Input and Output
C# programs generally use the input/output services provided by the run-time library of the .NET Framework. The statement, System.Console.WriteLine("Hello World!"); uses the WriteLine method, one of the output methods of the Console class in the run-time library. It displays its string parameter on the standard output stream followed by a new line. Other Console methods are used for different input and output operations. If you include the using System; directive at the beginning of the program, you can directly use the System classes and methods without fully qualifying them. For example, you can call Console.WriteLine instead, without specifying System.Console.Writeline:
using System;
|
Console.WriteLine("Hello World!");
|
For more information about input/output methods, see System.IO.
Compilation and Execution
You can compile the "Hello World!" program either by creating a project in the Visual Studio IDE, or by using the command line. Use the Visual Studio Command Prompt or invoke vsvars32.bat to put the Visual C# tool set on the path in your command prompt.
To compile the program from the command line:
Create the source file by using any text editor and save it using a name such as Hello.cs. C# source code files use the extension .cs.
To invoke the compiler, enter the command:
csc Hello.cs
If your program does not contain any compilation errors, a Hello.exe file will be created.
To run the program, enter the command:
Hello
Ввод и вывод
Программы на C#, как правило, используют службы ввода/вывода, предоставляемые библиотекой времени выполнения в .NET Framework. Оператор System.Console.WriteLine("Hello World!"); использует WriteLine – один из методов вывода класса Console в библиотеке времени выполнения. Он выводит свои строковые параметры в стандартном потоке вывода, за которым следует новая строка. Другие методы Console используются для разных операций ввода и вывода. Если в начало программы поместить директиву using System;, классы System и методы можно будет использовать напрямую без указания их полного имени. Например, можно вызвать Console.WriteLine без указания System.Console.Writeline:
using System;
|
|
Console.WriteLine("Hello World!");
|
|
Дополнительные сведения о методах ввода/вывода см. в разделе System.IO.
Компиляция и выполнение
Для компиляции программы "Hello World!" можно создать проект в среде IDE Visual Studio или воспользоваться командной строкой. Используйте средство командной строки Visual Studio или вызовите vsvars32.bat, чтобы в пути в командной строке открыть средство Visual C#.
Компиляция программы из командной строки.
С помощью любого текстового редактора создайте исходный файл и сохраните его с именем Hello.cs. Файл исходного кода C# имеет расширение .cs.
Чтобы вызвать компилятор, введите следующую команду:
csc Hello.cs
Если программа не содержит ошибок компиляции, то компилятор создает файл Hello.exe.
Чтобы запустить программу, введите следующую команду:
Hello
General Structure of a C# Program
C# programs can consist of one or more files. Each file can contain zero or more namespaces. A namespace can contain types such as classes, structs, interfaces, enumerations, and delegates, in addition to other namespaces. The following is the skeleton of a C# program that contains all of these elements.
// A skeleton of a C# program
using System;
namespace YourNamespace
{
class YourClass
{
}
struct YourStruct
{
}
interface IYourInterface
{
}
delegate int YourDelegate();
enum YourEnum
{
}
namespace YourNestedNamespace
{
struct YourStruct
{
}
}
class YourMainClass
{
static void Main(string[] args)
{
//Your program starts here...
}
}
}
|
Общая структура программы на C#
Программа на языке C# может состоять из одного или нескольких файлов. Каждый файл может содержать ноль или более пространств имен. Пространство имен может включать такие элементы, как классы, структуры, интерфейсы, перечисления и делегаты, а также другие пространства имен. Ниже приведена скелетная структура программы C#, содержащая все указанные элементы.
--
Main() and Command Line Arguments
The Main method is the entry point of your program, where you create objects and invoke other methods. There can only be one entry point in a C# program.
class TestClass
{
static void Main(string[] args)
{
// Display the number of command line arguments:
System.Console.WriteLine(args.Length);
}
}
|
Overview
The Main method is the entry point of your program, where the program control starts and ends.
It is declared inside a class or struct. It must be static and it should not be public. (In the example above it receives the default access of private.)
It can either have a void or int return type.
The Main method can be declared with or without parameters.
Parameters can be read as zero-indexed command line arguments.
Unlike C and C++, the name of the program is not treated as the first command line argument.
Main() и аргументы командной строки
Метод Main является точкой входа программы, где создаются объекты и вызываются другие методы. В программе C# возможна только одна точка входа.
class TestClass
{
static void Main(string[] args)
{
// Display the number of command line arguments:
System.Console.WriteLine(args.Length);
}
}
|
Общие сведения
Метод Main является точкой входа программы, в которой начинается и заканчивается управление программой.
Он объявляется внутри класса или структуры. Он должен быть статическим и не должен быть общим. (В приведенном выше примере он получает доступ по умолчанию типа “закрытый”.)
Он может иметь возвращаемый тип void или int.
Метод Main может быть объявлен с параметрами или без них.
Параметры считываются как аргументы командной строки с нулевым индексированием.
В отличие от языков C и C++, имя программы не рассматривается в качестве первого аргумента командной строки.
Command-Line Arguments
The Main method can use arguments, in which case, it takes one of the following forms:
static int Main(string[] args)
|
static void Main(string[] args)
|
The parameter of the Main method is a String array that represents the command-line arguments. Usually you check for the existence of the arguments by testing the Length property, for example:
if (args.Length == 0)
{
System.Console.WriteLine("Please enter a numeric argument.");
return 1;
}
|
You can also convert the string arguments to numeric types by using the Convert class or the Parse method. For example, the following statement converts the string to a long number by using the Parse method on the Int64 class:
long num = Int64.Parse(args[0]);
|
It is also possible to use the C# type long, which aliases Int64:
long num = long.Parse(args[0]);
|
You can also use the Convert class method ToInt64 to do the same thing:
long num = Convert.ToInt64(s);
|
Аргументы командной строки
Метод Main может использовать аргументы, принимая в этом случае одну из следующих форм:
static int Main(string[] args)
|
static void Main(string[] args)
|
Параметр метода Main является массивом значений типа String, представляющим аргументы командной строки. Обычно наличие аргументов проверяется путем проверки свойства Length, например:
if (args.Length == 0)
{
System.Console.WriteLine("Please enter a numeric argument.");
return 1;
}
|
Кроме того, строковые аргументы можно преобразовать в числовые типы с помощью класса Convert или метода Parse. Например, следующая инструкция преобразует строку в число типа long с помощью метода Parse класса Int64:
long num = Int64.Parse(args[0]);
|
Также можно использовать тип long языка C#, являющийся псевдонимом типа Int64:
long num = long.Parse(args[0]);
|
Для выполнения этой операции также можно воспользоваться методом ToInt64 класса Convert:
long num = Convert.ToInt64(s);
|
Example
In this example, the program takes one argument at run time, converts the argument to an integer, and calculates the factorial of the number. If no arguments are supplied, the program issues a message that explains the correct usage of the program.
// arguments: 3
|
public class Functions
{
public static long Factorial(int n)
{
if (n < 0) { return -1; } //error result - undefined
if (n > 256) { return -2; } //error result - input is too big
if (n == 0) { return 1; }
// Calculate the factorial iteratively rather than recursively:
long tempResult = 1;
for (int i = 1; i <= n; i++)
tempResult *= i;
return tempResult;
}
}
|
class MainClass
{
static int Main(string[] args)
{
// Test if input arguments were supplied:
if (args.Length == 0)
{
System.Console.WriteLine("Please enter a numeric argument.");
System.Console.WriteLine("Usage: Factorial ");
return 1;
}
try
{
// Convert the input arguments to numbers:
int num = int.Parse(args[0]);
System.Console.WriteLine("The Factorial of {0} is {1}.", num, Functions.Factorial(num));
return 0;
}
catch (System.FormatException)
{
System.Console.WriteLine("Please enter a numeric argument.");
System.Console.WriteLine("Usage: Factorial ");
return 1;
}
}
}
|
Пример
В этом примере программа принимает аргументы по одному и преобразует каждый из них в целое и вычисляет факториал этого числа. Если ни одного аргумента не предоставлено, то программа выдает сообщение, содержащее разъяснение правильного использования данной программы.
--------------
Output
The Factorial of 3 is 6.
Comments
The following are two sample runs of the program assuming that the program name is Factorial.exe.
Run #1:
Enter the following command line:
Factorial 10
You get the following result:
The Factorial of 10 is 3628800.
Run #2:
Enter the following command line:
Factorial
You get the following result:
Please enter a numeric argument.
Usage: Factorial
Результат
The Factorial of 3 is 6.
Примечания
Ниже приведены два примера выполнения программы, имя файла которой Factorial.exe.
Выполнение №1.
Введите следующую командную строку:
Factorial 10
Результат будет следующим:
The Factorial of 10 is 3628800.
Выполнение №2.
Введите следующую командную строку:
Factorial
Результат будет следующим:
Please enter a numeric argument.
Usage: Factorial
How to: Display Command Line Arguments
Arguments provided to an executable on the command-line are accessible through an optional parameter to Main. The arguments are provided in the form of an array of strings. Each element of the array contains one argument. White-space between arguments is removed. For example, consider these command-line invocations of a fictitious executable:
Input on Command-line
|
Array of strings passed to Main
|
executable.exe a b c
|
"a"
"b"
"c"
|
executable.exe one two
|
"one"
"two"
|
executable.exe “one two” three
|
"one two"
"three"
|
Example
This example displays the command line arguments passed to a command-line application. The output shown is for the first entry in the table above.
class CommandLine
{
static void Main(string[] args)
{
// The Length property provides the number of array elements
System.Console.WriteLine("parameter count = {0}", args.Length);
for (int i = 0; i < args.Length; i++)
{
System.Console.WriteLine("Arg[{0}] = [{1}]", i, args[i]);
}
}
}
|
parameter count = 3
Arg[0] = [a]
Arg[1] = [b]
Arg[2] = [c]
|
Отображение аргументов командной строки
Для доступа к аргументам, предоставленным для исполняемого файла в командной строке, можно использовать необязательный параметр для Main. Аргументы представлены в форме массива или строк. Каждый элемент массива содержит один аргумент. Пробел между элементами удален. Например, рассмотрим следующие вызовы вымышленного исполняемого файла из командной строки.
Данные, вводимые в командную строку
|
Массив строк, переданный в Main
|
исполняемый файл .exe a b c
|
"a"
"b"
"c"
|
исполняемый файл .exe один два
|
"один"
"два"
|
исполняемый файл .exe "один два" три
|
"один два"
"три"
|
Пример
В этом примере показаны аргументы командной строки, переданные в приложение командной строки. Далее представлен результат для первой записи в расположенной выше таблице.
--
How to: Access Command-Line Arguments Using foreach
Another approach to iterating over the array is to use the foreach statement as shown in this example. The foreach statement can be used to iterate over an array, a .NET Framework collection class, or any class or struct that implements the IEnumerable interface.
Example
This example demonstrates how to print out the command line arguments using foreach.
// arguments: John Paul Mary
|
class CommandLine2
{
static void Main(string[] args)
{
System.Console.WriteLine("Number of command line parameters = {0}", args.Length);
foreach (string s in args)
{
System.Console.WriteLine(s);
}
}
}
|
Number of command line parameters = 3
John
Paul
Mary
|
Доступ к аргументам командной строки с помощью оператора "foreach"
Другим методом итерации всех элементов массива является использование оператора foreach, как показано в следующем примере. Оператор foreach можно использовать для итерации всех элементов массива, класса коллекции .NET Framework или любого класса или структуры, реализующих интерфейс IEnumerable.
Пример
В данном примере показано, как напечатать аргументы командной строки с помощью оператора foreach.
--
Main() Return Values
The Main method can be of the type void:
static void Main()
{
//...
}
|
It can also return an int:
static int Main()
{
//...
return 0;
}
|
If the return value from Main is not to be used, then returning void allows slightly simpler code. However, returning an integer enables the program to relate status information to other programs or scripts that invoke the executable. An example of using the return value from Main is shown in the following example.
Значения, возвращаемые методом Main()
Метод Main может возвращать значение типа void:
static void Main()
{
//...
}
|
Он также может возвращать значение типа int:
static int Main()
{
//...
return 0;
}
|
Если значение, возвращаемое методом Main использоваться не будет, то указание в качестве возвращаемого типа void несколько упрощает код. Однако возврат целого значения позволяет программе передавать информацию о своем состоянии другим программам и сценариям, которые вызывают исполняемые файл. Ниже показан пример использования значения, возвращаемого методом Main.
Example
In this example a batch file is used to execute a program and test the return value of the Main function. When a program is executed in Windows, any value returned from the Main function is stored in an environment variable called ERRORLEVEL. By inspecting the ERRORLEVEL variable, batch files can therefore determine the outcome of execution. Traditionally, a return value of zero indicates successful execution. Below is a very simple program that returns zero from the Main function.
class MainReturnValTest
{
static int Main()
{
//...
return 0;
}
}
|
Next, a batch file is used to invoke the executable resulting from the previous code example. Because the code returns zero, the batch file will report success, but if the previous code is changed to return a non-zero value, and is then re-compiled, subsequent execution of the batch file will indicate failure.
@echo off
MainReturnValueTest
@if "%ERRORLEVEL%" == "0" goto good
:fail
echo Execution Failed
echo return value = %ERRORLEVEL%
goto end
:good
echo Execution Succeded
echo return value = %ERRORLEVEL%
goto end
:end
|
Sample Output
Execution Succeded
return value = 0
Пример
В этом примере с помощью пакетного файла запускается программа, после чего проверяется значение, возвращаемое функцией Main. При запуске программы в Windows значение, возвращаемое функцией Main, сохраняется в переменной среды, которая называется ERRORLEVEL. Проверка значения переменной ERRORLEVEL дает пакетному файлу возможность определить результат выполнения программы. В большинстве случаев на успешное выполнение указывает нулевое значение. Ниже показана простая программа, функция Main в которой возвращает ноль1.
class MainReturnValTest
{
static int Main()
{
//...
return 0;
}
}
|
Теперь исполняемый файл, созданный на основе приведенного выше примера кода, можно запустить с помощью пакетного файла, описанного ниже. Поскольку в результате выполнения кода будет возвращено значение 0, пакетный файл сообщит об успешном запуске программы. Если же изменить код таким образом, чтобы возвращалось значение, отличное от нуля, а затем повторно скомпилировать его, при выполнении пакетного файла будет отображено сообщение о сбое.
--2
Пример результатов выполнения
Execution Succeded
return value = 0
|