Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 1435 / 157 | Оценка: 4.31 / 4.00 | Длительность: 25:42:00
Лекция 20:

Консольные приложения в С#

< Лекция 19 || Лекция 20: 1234567891011
Аннотация: В данной лекции рассматривается создание консольных приложений и особенности их реализации.

Структура класса C#

Компания Microsoft специально для платформы .NET Framework разработала язык C# (Си-шарп). В отличие от языка C++, где основой программирования является упаковка кода в классы и функции, в C# введено более общее понятие - типы. Теперь типы включают в себя на равных классы, структуры, интерфейсы, перечисления и делегаты.

Таблица 20.1 . Ключевые слова в C#
abstract as base bool break byte case
catch char checked class const continue decimal
default delegate do double else enum event
explicit extern false finally fixed float for
foreach goto if implicit in int interface
internal is lock long namespace new null
object operator out override params private protected
public readonly ref return sbyte sealed short
sizeof stackalloc static string struct switch this
throw true try typeof uint ulong unchecked
unsafe ushort using virtual void volatile while

Существование самостоятельных глобальных функций, как это имеет место в C++, отменено. Теперь разработка кода программы сводится к последовательному развитию типов, главным из которых по прежнему остается класс. Каждый класс рекомендуется размещать, как самостоятельный фрагмент кода программы, в отдельном файле с расширением *.cs. Класс не принято разбивать на две части: объявление (файл *.h ) и реализацию (файл *.cpp ) - все размещается в одном файле *.cs.

Внутри класса дается объявление и реализация методов, определяющих его функциональность. Каждый класс размещается внутри именованных скобок namespace Имя{...}, задающих простанство имен. Кроме того, вначале файла с пользовательским классом перечисляются пространства имен используемых библиотечных классов. Объявление класса не должно заканчиваться точкой_с_запятой, как это принято в C++.

  • Запустите VS.NET и создайте новый проект консольного приложения со стандартным именем ConsoleApplication1. Это имя определит имена файлов и пространства имен, которые создаст мастер приложений по умолчанию, а также имя исполнимого файла приложения. Поэтому его нужно выбирать обдуманно.

Мастер создаст заготовку простейшего класса C#, который имеет вид

using System;

namespace ConsoleApplication1
{
/// 
/// Summary description for Class1.
/// 
class Class1
{
/// 
/// The main entry point for the application.
/// 
[STAThread]
static void Main(string[] args)
  {
  //
  // TODO: Add code to start application here
  //
  }
}
}
Листинг 20.1 . Заготовка класса C# консольного приложения
  • Зайдите в каталог проекта и посмотрите, что мастер создал много подкаталогов различного назначения и много файлов. Это существенно отличается от конфигурации проекта, создаваемого мастером C++. Конфигурацию проекта, созданного мастером C#, можно посмотреть в панели Solution Explorer, установив режим этой панели щелчком по кнопке Show All Files

  • Через панель Solution Explorer измените имя файла Class1.cs на HelloClass.cs. Вы увидете, что автоматически поменялось имя вкладки текстового редактора исходного кода оболочки, а на диске поменялось имя файла на HelloClass.cs

  • В текстовом редакторе оболочки измените имя класса Class1 на HelloClass. Убедитесь, что в панели Class View имя класса также изменилось и изменилось имя в раскрывающемся списке в верхней части рабочей области оболочки

  • В текстовом редакторе измените имя пространства имен проекта с C onsoleApplication1 на ConsoleApp. Отметьте изменения в раскрывающемся списке в верхней части рабочей области оболочки и в панели Class View

Давайте посмотрим на код класса, сгенерированного мастером. Там содержится единственный метод Main(). Это имя служебное и его менять нельзя!. Оно определяет точку входа в программу, с которой начнется выполнение приложения. Метод является общедоступным или закрытым (безразлично, все равно это точка входа), статическим, ничего не возвращающим. Другие же методы класса, предназначенные для вызова из клиента, обязательно должны быть общедоступными.

Любая строка определения данных или метода должна начинаться с оператора доступа. Если оператор доступа отсутствует, то соответствующая программная единица считается внутренней по умолчанию. Это же правило полностью относится и к структурам (в отличие от языка C++ ).

Аргументами метода Main() являются параметры командной строки, передаваемые в период запуска программы. Мы вольны использовать их по своему усмотрению или игнорировать. Могут быть следующие вариации заголовка метода Main()

Таблица 20.2 . Варианты метода Main()
static void Main(string[] args) {...}
public static void Main(string[] args) {...}
public static void Main() {...}
private static void Main(string[] args) {...}
private static void Main() {...}
static int Main(string[] args) {... return 0; }
public static int Main(string[] args) {... return 0; }
public static int Main() {... return 0; }
private static int Main(string[] args) {... return 0; }
private static int Main() {... return 0; }
  • Заполните метод Main() следующим кодом
using System;

namespace ConsoleApp
{
/// 
/// Summary description for Class1.
/// 
class HelloClass
{
  /// 
  /// The main entry point for the application.
  /// 
  [STAThread]
  static void Main(string[] args)
  {
  //
  // TODO: Add code to start application here
  //
  Console.WriteLine("Привет студентам от Снеткова!!!");
  while(true);
  }
}
}
Листинг 20.2 . Метод Main()
  • Постройте и выполните приложение. Должен получиться следующий результат

Запуск приложения через командную строку

Сейчас мы запустим приложение через командную строку, чтобы дальше исследовать механизм передачи параметров командной строки в приложение.

  • Нажмите кнопку Пуск панели задач TaskBar Windows.
  • Выполните команду системного меню Выполнить...

  • Введите в поле окна Запуск программы команду cmd
  • Используя команды cd \, cd .., dir, спуститесь вниз по дереву каталогов проекта ConsoleApplication1\bin\Debug в каталог Debug, в котором находится исполнимый файл ConsoleApplication1.exe.
  • Выполните команду ConsoleApplication1. Должно запуститься наше приложение.
  • Нажмите комбинацию клавиш Ctrl-C или Ctrl-Break, чтобы прервать работу приложения, зацикленного на бесконечном выполнении предложения while(true) ;

Оставьте открытым окно командной строки и приступим к модификации нашего проекта.

Обработка параметров командной строки в приложении

Вернемся к медоту Main() нашего приложения, вернее к его заголовку. Он выглядит так

static void Main(string[] args)
{
//
// TODO: Add code to start application here
//
Console.WriteLine("Привет студентам от Снеткова!!!");
while(true);
}
Листинг 20.3 . Заголовок метода Main()

Здесь квадратные скобки есть ничто иное, как псевдоним объявления экземпляра класса массива System.Array. Заголовок мог бы выглядеть так

string System.Array args

  • Измените метод Main() так, чтобы внутри него перебирались параметры командной строки
using System;

namespace ConsoleApp
{
/// 
/// Summary description for Class1.
/// 
class HelloClass
{
  /// 
  /// The main entry point for the application.
  /// 
  [STAThread]
  static void Main(string[] args)
  {
  //
  // TODO: Add code to start application here
  //
  // Выводим параметры на консоль
  for(int i=0; i < args.Length; i++)
  {
  Console.WriteLine("Arg: {0}", args[i]);
  }
  Console.WriteLine("Привет студентам от Снеткова!!!");
  while(true);
  }
}
}
Листинг 20.4 . Перебор параметров в методе Main() с помощью цикла for()
  • Постройте приложение, выполнив команду меню оболочки Project/Build Solution
  • Вернитесь в окно командной строки Windows, в котором текущим должен быть установлен каталог ConsoleApplication1\bin\Debug с исполнимым файлом и наберите в командной строке следующий текст

>ConsoleApplication1 Раз Два Три Четыре Пять

После нажатия клавиши Enter на экране должен появиться следующий результат

Arg: Раз
Arg: Два
Arg: Три
Arg: Четыре
Arg: Пять
Привет студентам от Снеткова!!!
  • Нажмите комбинацию клавиш Ctrl-C или Ctrl-Break, чтобы прервать работу приложения, зацикленного на бесконечном выполнении предложения while(true) ;
  • Замените в методе Main() цикл for на foreach, получив такой код
using System;

namespace ConsoleApp
{
/// 
/// Summary description for Class1.
/// 
class HelloClass
{
/// 
/// The main entry point for the application.
/// 
[STAThread]
static void Main(string[] args)
{
//
// TODO: Add code to start application here
//
// Выводим параметры на консоль
/*
for(int i=0; i < args.Length; i++)
{
Console.WriteLine("Arg: {0}", args[i]);
}
*/
foreach(string s in args)
{
Console.WriteLine("Arg: {0}", s);
}
Console.WriteLine("Привет студентам от Снеткова!!!");
while(true);
}
}
}
Листинг 20.5 . Перебор параметров командной строки в методе Main() с помощью цикла foreach()
  • Постройте приложение, выполнив команду меню оболочки Project/Build Solution
  • Вернитесь в окно командной строки Windows, в котором текущим должен быть установлен каталог ConsoleApplication1\bin\Debug с исполнимым файлом и наберите (либо нажмите клавишу со стрелкой вверх) в командной строке следующий текст

>ConsoleApplication1 Раз Два Три Четыре Пять

После нажатия клавиши Enter на экране должен появиться тот же самый результат

Arg: Раз
Arg: Два
Arg: Три
Arg: Четыре
Arg: Пять
Привет студентам от Снеткова!!!
  • Нажмите комбинацию клавиш Ctrl-C или Ctrl-Break, чтобы прервать работу приложения, зацикленного на бесконечном выполнении предложения while(true);
< Лекция 19 || Лекция 20: 1234567891011
Максим Филатов
Максим Филатов

Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет:

Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.

 

Как активировать код?