Class HelloWorld // Объявление класса
Class HelloWorld // Объявление класса
{ static void Main() // Объявление метода этого класса
{ System.Console.WriteLine("Hello World!"); // Вывод сообщения
// Предотвращение закрытия окна консоли
System.Console.ReadLine();
}
}
2.1. Основные элементы языка C#
Рис.2.1. Диалоговое окно Options
Примеры идентификаторов:
Правильные идентификаторы: | Неправильные идентификаторы: |
мой_идентификатор identifier2 Subroutine @bool @static | мой идентификатор // содержит пробел 2identifier // начинается цифрой bool // ключевое слово @bool2 // за символом @ нет // ключевого слова |
IdentifierNumberOne
Переменные и константы
Например: DecimalNum, Total, Date_of_birth – допустимые имена переменных;
2Time, $Total, Date of birth, Write – недопустимые имена переменных.
Примеры объявления переменных:
int a, b = -3;
string greeting = "Hello, World!";
double bigNumber = 1e100;
Примеры объявления констант:
const int n = 0;
const double pi = 3.14159265358979323846264338327950;
const string productName = "Visual C#";
const double gravitationalConstant = 6.673e-11, e = 2,718281828459;
const int a = 5;
const int b = a + 100;
Модификаторы доступа
Модификаторы доступа: public , internal , protected , private .
Примеры использования модификаторов доступа:
private string productName = "Visual C#";
public const double pi = 3.14159265358979323846;
Присваивание значений переменным
Синтаксис использования оператора присваивания "=": переменная = выражение;
Например: sngFirst = 10; strLastName = "Иванов"; Result = First + 255; strName = "Иванов" + ": " + strTeam; | Рис.2.2. Алгоритмическая конструкция «Процесс» |
Типы данных
(http://msdn.microsoft.com/ru-ru/library/ms173104.aspx)
(http://msdn.microsoft.com/ru-ru/library/3ewxz6et.aspx)
Значащие и ссылочные типы
Пример 2.2. Демонстрация изменений переменных значащих и ссылочных типов.
using System;
// Определяем структуру с двумя целочисленными полями
Struct Foo
{ public int x, у;
}
Class ValRefClass
{ static void Main()
{ // Создаем две переменные класса Foo
Foo f1 = new Foo();
Foo f2 = new Foo();
f1.x = 100;
f1.y = 200;
f2 = f1; // Присваивание переменной f1 значение переменной f2
// Вывод значений переменных
Console.WriteLine("fl.x = {0}", f1.x);
Console.WriteLine("fl.y = {0}", f1.y);
Console.WriteLine("f2.x = {0}", f2.x);
Console.WriteLine("f2.у = {0}", f2.y);
f1.x = 300; // Изменение f1
// Вывод полей x обеих переменных
Console.WriteLine("После изменения f1.x:");
Console.WriteLine("f1.x = {0}", f1.x);
Console.WriteLine("f2.x = {0}", f2.x);
Console.ReadLine();
}
}
/* Вывод (изменение переменных значащего типа):
fl.x = 100
fl.y = 200
f2.x = 100
f2.y = 200
После изменения f1.x:
fl.x = 300
f2.x = 100
*/
Вместо значащего типа struct можно использовать ссылочный тип class:
Class Foo
{ public int x, у;
}
/* Вывод (изменение переменных ссылочного типа):
fl.x = 100
fl.y = 200
f2.x = 100
f2.y = 200
После изменения f1.x:
fl.x = 300
f2.x = 300
*/
Таблица типов данных
Таблица 2.1. Типы данных
Тип С# / тип CTS | Описание (размер в байтах) | Диапазон значений |
Целые типы | ||
sbyte System.SByte | Короткое целое число (1 байт) | от -128 до +127 |
byte System.Byte | Короткое целое число без знака (1 байт) | от 0 до 255 |
short System.Int16 | Целое число (2 байта) | от -32 768 до +32 767 |
ushort System.UIntl6 | Целое число без знака (2 байта) | от 0 до 65 535 |
int System.Int32 | Целое число (4 байта) | от -2 147 483 648 до +2 147 483 647 |
uint System.UInt32 | Целое число без знака (4 байта) | от 0 до 4 294 967 295 |
long System.Int64 | Длинное целое число (8 байтов) | от -9 223 372 036 854 775 808 до +9 223 372 036 854 775 807 |
ulong System.UInt64 | Длинное целое число без знака (8 байтов) | от 0 до 18 446 744 073 709 551 615 |
Вещественные типы | ||
float System.Single | Число с плавающей запятой (4 байта) | от 1,5 · 10-45 до 3,4 · 1038 от -3,402 823 47 · 1038 до -1,401 298 · 10-45 для отрицательных величин и от +1,401 298 · 10-45 до +3,402 823 47 · 1038 для положительных величин |
double System.Double | Число с плавающей запятой двойной точности (8 байтов) | от 5.0 · 10-324 до 1,7 · 10308 от -1,797 693 134 862 315 7 · 10308 до -4,940 656 458 412 47 · 10-324 для отрицательных величин и от 4,940 656 458 412 47 · 10-324 до 1,797 693 134 862 315 7 · 10308 для положительных величин |
decimal System.Decimal | Десятичное число с фиксированной запятой (16 байтов) | от -7,9 · 1028 до +7,9 · 1028 ±79 228 162 514 264 337 593 543 950 335 – как целое число; ±7,9 228 162 514 264 337 593 543 950 335 – как десятичное число (28 разрядов после запятой); Наименьшее ненулевое значение: ±10-28 |
Логический тип | ||
bool System.Boolean | Логическое значение (1 байт, зависит от платформы) | true или false . Эти значения не отождествляются с целочисленными значениями |
Другие типы | ||
char System.Char | 16-битовый код символа в кодировке Unicode (2 байта) | один символ (код – U+0000 ... U+ffff). Область U+0000 ... U+007f отведена для ASCII-кодов, U+0400 ... U+052f – для кириллицы |
Ссылочные типы | (значения хранятся в куче) | |
string System.String | Строка (последовательность из нуля или более символов в кодировке Unicode) | представляет собой неизменяемый объект в куче и рассматривается как массив символов. Любое изменение строки создает новый объект типа string, при этом старый объект не уничтожается |
object System.Object | Ссылка на объект (4 байта – для 32-bit и 8 байт – для 64-bit платформ) | любая ссылка на объект |
Структурный тип | ||
System.DateTime | Дата и время (8 байтов) | от 00:00:00 1 января 0001 года до 23:59:59 31 декабря 9999 года |
Пример 2.3. Вывод некоторых сведений о типе decimal.
using System;
using System.Collections.Generic;
using System.Text;
Namespace Decimals
{ class Decimal
{ static void Main()
{ decimal d;
Console.WriteLine("Тип decimal:");
Console.WriteLine("Минимум: " +
decimal.MinValue.ToString("N"));
Console.WriteLine("Максимум: " +
decimal.MaxValue.ToString("N"));
d = decimal.Parse("-33333");
Console.WriteLine("GetType: " + d.GetType());
Console.WriteLine("d = {0}", d);
Console.ReadLine();
}
}
}
/* Вывод:
Тип decimal:
Минимум: -79 228 162 514 264 337 593 543 950 335.00
Максимум: 79 228 162 514 264 337 593 543 950 335.00
GetType: System.Decimal
d = -33333
*/
2.2.3. Приведение и преобразование типов
(http://msdn.microsoft.com/ru-ru/library/ms173105.aspx)
Примеры неявного преобразования:
int i = 0;
double d = 0;
i = 10;
d = i; // Неявное преобразование
Таблица 2.2. Неявные преобразования типов
Исходный тип | Тип назначения |
sbyte | short, int, long, float, double, decimal |
byte | short, ushort, int, uint, long, ulong, float, double, decimal |
short | int, long, float, double, decimal |
ushort | int, uint, long, ulong, float, double, decimal |
int | long, float, double, decimal |
uint | long, ulong, float, double, decimal |
long | float, double, decimal |
ulong | float, double, decimal |
char | ushort, int, uint, long, ulong, float, double, decimal |
float | double |
Примеры явного преобразования:
int i = 0;
double d = 3.5;
i = (int) d; // Явное преобразование, или "приведение"
Таблица 2.3. Явные преобразования типов
Исходный тип | Тип назначения |
sbyte | byte, ushort, uint, ulong, char |
byte | sbyte, char |
short | sbyte, byte, ushort, uint, ulong, char |
ushort | sbyte, byte, short, char |
int | sbyte, byte, short, ushort, uint, ulong, char |
uint | sbyte, byte, short, ushort, int, char |
long | sbyte, byte, short, ushort, int, uint, ulong, char |
ulong | sbyte, byte, short, ushort, int, uint, long, char |
char | sbyte, byte, short |
float | sbyte, byte, short, ushort, int, uint, long, ulong, char, decimal |
double | sbyte, byte, short, ushort, int, uint, long, ulong, char, float, decimal |
decimal | sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double |
Совместимость типов
Пример искажения результата или потери точности при явном преобразовании типов:
byte b1;
int in1 = 1, in2 = 2, in3 =1000;
b1 = in1 + in2; // Ошибка! Тип int несовместим с типом byte
b1 = (byte)(in1 + in2); // Правильное преобразование
Class TestClass
{ static void Main(string[] args)
{ // Отображение числа параметров командной строки:
System.Console.WriteLine(args.Length);
}
}
Пространства имен
Таблица 2.5. Некоторые пространства имен .NET Framework
Пространство имен | Назначение |
System | Корневое пространство имен, содержащее класс Object и множество низкоуровневых классов для работы с простыми типами, выполнения математических операций, сбора мусора и т.п. |
System.Collections | Контейнерные классы, такие как ArrayList, Queue, Stack, SortedList и т.п. |
System.Data System.Data.Common System.Data.OleDb System.Data.SqlClient | Классы этих пространств предназначены для работы с базами данных |
System.Drawing System.Drawing.Drawing2D System.Drawing.Printing | Классы для примитивов графического интерфейса – растровых изображений, шрифтов, значков, поддержки печати |
System.IO | Классы, отвечающие за операции ввода-вывода |
System.Net | Классы, отвечающие за передачу данных по сети (запрос-ответ, создание сокетов и т.п.) |
System.Security | В этом пространстве имен собраны классы, использующиеся для повышения безопасности при передаче данных (работа с разрешениями, криптография и т.п.) |
System.Threading | Это пространство имен для классов, которые работают с программными потоками, такими как Mutex, Thread, Timeout и т.п. |
System.Web | Классы, используемые в веб-приложениях |
System.Windows.Forms | Классы для работы с элементами интерфейса Windows – окнами, элементами управления и т.д. |
Syste.XML | Множество классов для работы с данными в формате XML |
Использование оператора using для объявления ссылки на пространство имен:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
Пример задания пространства имен (Drawing) в операторе using:
Class myClass
{ public void DoIt()
{ // Создаем изображение 20 на 20 пикселей
Bitmap bm = new Bitmap(20, 20);
...
}
}
Можно указывать составное имя класса:
Class myClass
{ public void DoIt()
{ // Создаем изображение 20 на 20 пикселей
System.Drawing.Bitmap bm = new System.Drawing.Bitmap(20, 20);
...
}
}
Выражения и операции
(http://msdn.microsoft.com/ru-ru/library/ms173142)
(http://msdn.microsoft.com/ru-ru/library/6a71f45d)
Таблица 2.6. Операции по категориям и их приоритет
Выражение | Описание (приоритет) |
Основные операторы (9) | |
x.y | Доступ к членам |
f(x) | Вызов функции, метода и делегата |
a[x] | Доступ к элементу массива |
x++ | Постфиксное приращение (инкремент) |
x-- | Постфиксное уменьшение (декремент) |
new T(...) | Создание объекта и делегата |
new T(...){...} | Создание объекта с инициализатором |
new {...} | Анонимный инициализатор объекта |
new T[...] | Создание массива. |
typeof(T) | Получение объекта System.Type для T (определение типа) |
checked(x) | Вычисление выражения в проверенном контексте (создание проверяемого блока) |
unchecked(x) | Вычисление выражения в непроверенном контексте (создание непроверяемого блока) |
default(T) | Получение значения по умолчания для типа T |
delegate {} | Анонимная функция (анонимный метод) |
x->y | Объединение разыменования указателя и доступа к члену (x – это указатель типа T*, а y – это член T) (требуется небезопасный контекст) |
Унарные операторы (8) | |
+x | Унарный плюс |
-x | Унарный минус |
!x | Логическое отрицание |
~x | Поразрядное отрицание (инверсия разрядов) |
++x | Префиксное приращение (инкремент) |
--x | Префиксное уменьшение (декремент) |
(T)x | Явное преобразование типа переменной x в тип T |
& | Унарный оператор возвращает адрес своего операнда (требуется небезопасный контекст) |
sizeof(x) | Определяет размер в байтах для переменной встроенного типа (а также ссылочного типа, типа указателей, структур). |
Мультипликативные операторы (7) | |
* | Умножение |
/ | Деление |
% | Остаток от деления |
Аддитивные операторы (6) | |
x + y | Сложение, объединение строк, объединение делегатов |
x - y | Вычитание, удаление делегатов |
Операторы сдвига (5) | |
x << y | Сдвиг влево |
x >> y | Сдвиг вправо |
Операторы отношения и типа (4) | |
x < y | Меньше |
x > y | Больше |
x <= y | Меньше или равно |
x >= y | Больше или равно |
x is T | Проверка принадлежности к типу. Возвращает значение true, если x относится к типу T, в противном случае возвращает значение false |
x as T | Преобразование типа. Возвращает x типа T или нулевое значение, если x не относится к типу T |
Операторы равенства (3) | |
x == y | Равно |
x != y | Не равно |
Логические, условные операторы и Null-операторы (2) | |
x & y | Логическое умножение – для операндов типа bool. Поразрядное И (AND) – для целых операндов |
x | y | Логическое сложение – для операндов типа bool. Поразрядное ИЛИ (OR) – для целых операндов |
x ^ y | Логическое исключающее ИЛИ – для операндов типа bool. Поразрядное исключающее ИЛИ (XOR) – для целых операндов |
x && y | Условное умножение (AND) – вычисляет y только если x имеет значение true |
x || y | Условное сложение (OR) – вычисляет y только если x имеет значение false |
x ?? y | Объединение нулей – равно y, если x – нулевое, в противном случае равно x |
x ?: y : z | Условная операция. Результат равен y, если x имеет значение true, и z если x имеет значение false |
Операторы назначения и анонимные операторы (1) | |
= | Присваивание |
x op= y | Составное присваивание. Поддерживает следующие операторы: += , -= , *= , /= , %= , &= , |= , ^= , <<= , >>= |
(T x) => y | Анонимная функция (лямбда-выражение) |
Основные операции.
Операции постфиксных инкремента и декремента:
int x = 1;
Console.WriteLine("{0} {1} {2}", x++, x--, x); // Вывод: 1 2 1
Операция sizeof(x) определяет размер в байтах для переменной встроенного или ссылочного типа, а также типа указателей или структур:
int intSize = sizeof(int); // Результат: intSize = 4
Пример 2.4. Использование операции ->.
/ Компилировать с ключем: /unsafe
Struct Point
{ public int x, y;
}
Class MainClass12
{ unsafe static void Main()
{ Point pt = new Point();
Point* pp = &pt;
pp->x = 123;
pp->y = 456;
Console.WriteLine("{0} {1}", pt.x, pt.y); // Вывод: 123 456
}
}
Унарные операции.
Пример 2.5. Использование операции инверсии разрядов целого числа (~).
using System;
Class Demo
{ public static string ByteToStr(byte b)
// Преобразование байта (b) в двоичную форму
{ string s = ""; // Выходная строка
// Цикл преобразования 8-ми разрядов
for (sbyte n = 7; n >= 0; n--)
{ if ((byte)(b / Math.Pow(2, n)) == 1)
{ s = s + '1';
b = (byte)(b - (byte)(Math.Pow(2, n)));
}
Else
s = s + '0';
}
return s;
}
Static void Main()
{ byte b = 1;
int i = (int) b;
i = ~i;
byte b2 = (byte) (i);
Console.WriteLine("Демонстрация инверсии разрядов " +
"целого числа:");
Console.WriteLine("Значение байта без инверсии: {0,3};\t" +
"двоичная форма: {1}", b, ByteToStr(b));
Console.WriteLine("Значение байта с инверсией: {0,3};\t" +
"двоичная форма: {1}", b2, ByteToStr(b2));
Console.ReadLine();
}
}
/* Вывод:
Демонстрация инверсии разрядов целого числа:
Class Demo
{ public static string ByteToStr(byte b)
// Преобразование байта (b) в двоичную форму
{ ... // Код функции смотри в примере 2.5
}
Static void Main()
{ Console.WriteLine("Демонстрация сдвига разрядов " +
"целого числа:");
byte b = 1;
for (int i = 1; i <= 8; i++)
{ Console.WriteLine("Значение байта: {0,3};\t" +
"двоичная форма: {1}", b, ByteToStr(b));
int k = (int) b;
b = (byte)(k << 1);
}
Console.ReadLine();
}
}
/* Вывод:
Демонстрация сдвига разрядов целого числа:
Методы класса System.Match
(http://msdn.microsoft.com/ru-ru/library/system.math)
Таблица 2.7. Поля и основные методы класса System.Math
Члены | Описание |
Поля | |
E | Представляет основание натурального логарифма, определяемое константой e = 2.71828182845904523536. |
PI | Представляет отношение длины окружности к ее диаметру, определяемое константой π = 3.14159265358979323846. |
Методы | |
double Abs(double d); | Возвращает модуль аргумента. Имеются перегруженные методы для всех математических типов (Decimal, Single, SByte, Int16, Int32, Int64) |
double Acos(double d); | Возвращает угол в радианах по его арккосинусу |
double Asin(double d); | Возвращает угол в радианах по его арксинусу |
double Atan(double d); | Возвращает угол в радианах по его арктангенсу |
long BigMul(int x, int y); | Возвращает произведение двух 32-разрядных чисел |
double Ceiling(double d); | Возвращает наименьшее целое число, которое больше или равно аргументу. Имеется перегруженный метод для типа Decimal |
double Cos(double d); | Возвращает косинус угла d в радианах |
double Cosh(double d); | Возвращает гиперболический косинус угла d в радианах |
int DivRen (int a, int b, out int R); | Возвращает результат деления двух целых чисел и остаток R как выходной параметр. Имеется перегруженный метод для типа Int64 |
double Exp(double d); | Возвращает Е в степени d |
double Floor(double d); | Возвращает наибольшее целое, которое меньше или равно заданному числу. Имеется перегруженный метод для типа Decimal |
double IEEERemainder (double a, double b); | Возвращает остаток от деления а на b |
double Log(double d); | Возвращает натуральный логарифм числа d. В перегруженном методе вторым параметром передается основание логарифма |
double Log10(double d); | Возвращает десятичный логарифм числа d |
double Max (double a, double b)); | Возвращает максимальное из двух чисел. Имеются перегруженные методы для всех математических типов (Decimal, Single, SByte, Byte, Int16, UInt16, Int32, UInt32, Int64, UInt64) |
double Min (double a, double b); | Возвращает меньшее из двух чисел. Имеются перегруженные методы для всех математических типов (Decimal, Single, SByte, Byte, Int16, UInt16, Int32, UInt32, Int64, UInt64) |
double Pow (double a, double b); | Возвращает результат возведения числа а в степень b |
double Round(double a); double Round (double a, Int32 n); | Округляет число а до ближайшего целого (или до n разрядов). Имеется перегруженный метод для типа Decimal |
int Sign(double a); | Возвращает -1, 0 или +1, когда число а, соответственно, меньше нуля, равно ему или больше нуля. Имеются перегруженные методы для всех математических типов (Decimal, Single, SByte, Int16, Int32, Int64) |
double Sin(double a); | Возвращает синус угла а в радианах |
double Sinh(double a); | Возвращает гиперболический синус угла а в радианах |
double Sqrt(double a); | Возвращает корень квадратный из а |
double Tan(double a); | Возвращает тангенс угла а в радианах |
double Tanh(double a); | Возвращает гиперболический тангенс угла а в радианах |
double Truncate(double a) | Возвращает целую часть заданного числа a. Имеется перегруженный метод для типа Decimal |
Пример 2.7. Использование методов класса System.Math для определения высоты, площади и углов трапеции по ее известным сторонам.
Дано: Трапеция ABCD; основания: a = 20 см, c = 10 см, бок. стороны: b = 8 см, d = 6 см. Найти: h, S, α, β. |
Формулы: (ф-ла Герона);
=> ;
;
sin α = h / b ; Ðαрад = arcsin α ; Ðαград = αрад · 180 / π ;
sin β = h / d ; Ð βрад = arcsin β ; Ð βград = βрад · 180 / π .
using System;
Class MathTrapezoid
{ static void Main()
{ double a = 20.0; // Большее основание
double c = 10.0; // Меньшее основание
double b = 8.0; // Левая сторона
double d = 6.0; // Правая сторона
Console.WriteLine("Основания трапеции равны 20 и 10 см, " +
"боковые стороны - 8 и 6");
// Вычисление высоты трапеции
double p = (a - c + b + d) / 2.0;
double S_ABD = Math.Sqrt(p * (p - a + c) * (p - b) * (p - d));
double h = 2.0 * S_ABD / (a - c);
Console.WriteLine("Высота трапеции: " + h.ToString());
// Вычисление площади трапеции
double S_ABCD = (a - c) * h / 2.0;
Console.WriteLine("Площадь трапеции: " + S_ABCD.ToString());
// Вычисление левого нижнего угла трапеции (в радианах)
double sinA = h / b;
double AlphaRad = Math.Round(Math.Asin(sinA), 2);
Console.WriteLine("Левый нижний угол: " + AlphaRad.ToString() +
" (радиан)");
// Вычисление правого нижнего угла трапеции (в радианах)
double sinB = h / d;
double BetaRad = Math.Round(Math.Asin(sinB), 2);
Console.WriteLine("Правый нижний угол: " + BetaRad.ToString() +
" (радиан)");
// Вычисление левого нижнего угла трапеции (в градусах)
double AD = AlphaRad * 180 / Math.PI;
double AlphaDegree = Math.Round(AD, 2);
Console.WriteLine("Левый нижний угол: " +
AlphaDegree.ToString () + " (градусов)");
// Вычисление правого нижнего угла трапеции (в градусах)
double BD = BetaRad * 180 / Math.PI;
double BetaDegree = Math.Round(BD, 2);
Console.WriteLine("Правый нижний угол: " +
BetaDegree.ToString() + " (градусов)");
Console.ReadLine();
}
}
/* Вывод:
Высота трапеции: 4,8
Методы класса System.Random
(http://msdn.microsoft.com/ru-ru/library/system.random)
Таблица 2.8. Основные методы класса System.Random
Метод | Описание |
int Next(); | Возвращает очередное псевдослучайное число. В перегруженных вариантах метода можно указывать максимальное значение генерируемых чисел или диапазон их значений |
void NextBytes (byte[] buffer); | Заполняет массив байтов buffer псевдослучайными значениями |
double NextDouble(); | Возвращает вещественное псевдослучайное число в диапазоне от 0,0 до 1,0 |
Пример 2.8. Создание четырех генераторов Random: два первых инициализируются текущими датой и временем, поэтому порождают разные последовательности; третий и четвертый генераторы инициализируются одинаковым целым числом и порождают одинаковые последовательности псевдослучайных чисел.
using System;
using System.Collections.Generic;
using System.Text;
Namespace RandomTest
{ class Program
{ static void Main()
{ Random rnd1 = new Random();
Console.Write("rnd1 = new Random():");
for (int i = 1; i <= 5; i++)
Console.Write(" " + rnd1.Next().ToString());
Console.WriteLine();
Console.Write("rnd2 = new Random():M);
Random rnd2 = new Random();
for (int i = 1; i <= 5; i++)
Console.Write(" " + rnd2.Next().ToString());
Console.WriteLine();
Random rnd3 = new Random(1);
Console.Write("rnd3 = new Random(1):");
for (int i = 1; i <= 5; i++)
Console.Write(" " + rnd3.Next().ToString());
Console.WriteLine();
Random rnd4 = new Random(1);
Console.Write(Mrnd4 = new Random(1):");
for (int i = 1; i <= 5; i++)
Console.Write(" " + rnd4.Next().ToString());
Console.WriteLine();
Console.ReadLine();
}
}
}
/* Вывод:
rnd1 = new Random(): 529133478 2040581043 712156624 1709554482 1088426986
rnd2 = new Random(): 1271129561 1192576377 581760190 1294179256 1279863097
rnd3 = new Random(1): 534011718 237820880 1002897798 1657007234 1412011072
rnd4 = new Random(1): 534011718 237820880 1002897798 1657007234 1412011072
*/
class HelloWorld // Объявление класса
{ static void Main() // Объявление метода этого класса
{ System.Console.WriteLine("Hello World!"); // Вывод сообщения
// Предотвращение закрытия окна консоли
System.Console.ReadLine();
}
}
2.1. Основные элементы языка C#
Рис.2.1. Диалоговое окно Options
Примеры идентификаторов:
Правильные идентификаторы: | Неправильные идентификаторы: |
мой_идентификатор identifier2 Subroutine @bool @static | мой идентификатор // содержит пробел 2identifier // начинается цифрой bool // ключевое слово @bool2 // за символом @ нет // ключевого слова |
IdentifierNumberOne
Переменные и константы
Например: DecimalNum, Total, Date_of_birth – допустимые имена переменных;
2Time, $Total, Date of birth, Write – недопустимые имена переменных.
Примеры объявления переменных:
int a, b = -3;
string greeting = "Hello, World!";
double bigNumber = 1e100;
Примеры объявления констант:
const int n = 0;
const double pi = 3.14159265358979323846264338327950;
const string productName = "Visual C#";
const double gravitationalConstant = 6.673e-11, e = 2,718281828459;
const int a = 5;
const int b = a + 100;
Модификаторы доступа
Модификаторы доступа: public , internal , protected , private .
Примеры использования модификаторов доступа:
private string productName = "Visual C#";
public const double pi = 3.14159265358979323846;