Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Метод Main() в языке программирования c# (c sharp)

 

Метод с именем Main является самым главным методом в программе на языке программирования c sharp (c#), потому что с него начинается выполнение приложения. Существует несколько вариантов написания метода Main():

static void Main()

static int Main() return Целое__число;

static void Main (string[] args)

static public int Main (string[] args) {

return Целое_число;

}

Обратите внимание, что все варианты метода Main() в языке программирования c# (c sharp) являются статичными (в начале стоит модификаторstatic).Это значит, что метод можно вызывать без создания экземпляра класса. Логично? Я думаю, что да, ведь при запуске приложе­ния еще никаких классов не создавалось, а значит, существуют только статичные методы и переменные, которые инициализируются автоматически при первом об­ращении.

Все эти объявления сводятся к одной простой истине — метод может возвра­щать пустое значение или число, а также может не принимать никаких параметров или принимать массив строк.

Метод Main() не обязан быть открытым, а может быть объявлен какprivate. В этом случае другие сборки не смогут вызывать метод напрямую. Если перед на­ми исполняемый файл, то он прекрасно будет запускаться и с закрытым методом

Main().

Почему в качестве параметра передается именно массив строк? Дело в том, что ОС, когда вызывает программу, может передать ей в качестве параметров одну строку. Это уже сама программа разбивает монолитную строку на массив, а в каче­стве разделителя используется пробел. Это значит, что если вы передадите про­грамме два СЛОВа, разделенных пробелом, например"parameterl parameter2'*,то В массиве значений будет создано две строки parameterl И parameter2.

Следующий пример показывает, как отобразить в консоли все переданные па­раметры:

private static void Main(string[] args) {

foreach (string s in args) Console.WriteLine(s);

Console.ReadLine();

}

Чтобы запустить пример из среды разработки и сразу же увидеть результат, вы можете прямо в среде разработки прописать параметры, которые должны будут передаваться программе. Для этого щелкните правой кнопкой мыши по имени про­екта и в контекстном меню выберите пункт Properties. Здесь выберите раздел Debug и в поле Command line arguments (Параметры командной строки) введите текст, который должен быть передан программе при запуске.

А что, если нужно передать программе имя файла, которое содержит пробелы? Интересный вопрос и мы часто можем встретиться с ним, но он решается легко — имя файла нужно заключить в двойные кавычки и передать в таком виде програм­ме в качестве параметра. Точно так же можно поступить с любой другой строкой, которая не должна быть разбита по пробелам. Все, что находится между кавычка­ми, не разбивается по параметрам.

Неужели доступ к параметрам командной строки можно получить только из метода Main() в языке программирования c# (c sharp)? А что если у нас большой проект и нужно узнать, что нам передали из совершенно другого места? И это возможно. Есть такой класс Environment, у которого есть статичный метод GetcommandLineArgs() (это значит, что для доступа к методу не нужно создавать класс), который вернет нам массив аргументов. Сле­дующий пример получает аргументы от класса и выводит их в консоль:

private static void Main() {

string[] args = Environment.GetcommandLineArgs();

foreach (string s in args) Console.WriteLine(s);

Console.ReadLine();

}

Запомните,ЧТО Environment.GetcommandLineArgs() возвращает массив пара­метров на один больше, потому что самым первым параметром (под индексом 0) всегда идет полный путь к запущенному файлу. В Интернете часто можно услы­шать вопрос о том, как узнать, откуда была запущена программа. Легко! Нужно посмотреть нулевой аргумент В Environment.GetcommandLineArgs(): stringfullpath= Environment.GetcommandLineArgs()[0];

Эта строка кода сохранит в переменной fullpathполный путь, включая имя файла запущенной программы.

Внимание!

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

Статический класс — сущность в объекто-ориентированном языке программирования. Является одной из разновидностей класса. Суть данного вида состоит в том, что каждая функция данного класса является статической. Как правило, у данных типов класса не описаны конструктор и деструктор. Использовать статические функции класса можно, не создавая самого экземпляра класса. Это бывает удобно для создания списка функций, вложенных в какое-нибудь имя.

 


Статический класс в основном такой же, что и нестатический класс, но имеется одно отличие: нельзя создавать экземпляры статического класса. Другими словами, нельзя использовать ключевое слово new для создания переменной типа класса. Поскольку нет переменной экземпляра, доступ к членам статического класса осуществляется с использованием самого имени класса. Например, если имеется статический класс, называемый UtilityClass, имеющий открытый метод, называемый MethodA, вызов метода выполняется, как показано в следующем примере.

Статический класс может использоваться как обычный контейнер для наборов методов, работающих на входных параметрах, и не должен возвращать или устанавливать каких-либо внутренних полей экземпляра. Например, в библиотеке классов платформы.NET Framework статический класс System.Math содержит методы, выполняющие математические операции, без требования сохранять или извлекать данные, уникальные для конкретного экземпляра класса Math. Это значит, что члены класса применяются путем задания имени класса и имени метода, как показано в следующем примере.

Как и в случае с типами всех классов сведения о типе для статического класса загружаются средой CLR.NET Framework, когда загружается программа, которая ссылается на класс. Программа не может точно указать, когда загружается класс. Но гарантируется загрузка этого класса, инициализация его полей и вызов статического конструктора перед первым обращением к классу в программе. Статический конструктор вызывается только один раз, и статический класс остается в памяти на время существования домена приложения, в котором находится программа.

Следующий список предоставляет основные характеристики статического класса:

· Содержит только статические члены.

· Создавать его экземпляры нельзя.

· Он запечатан.

· Не может содержать конструкторов экземпляров.

По сути, создания статического класса аналогично созданию класса, содержащего только статические члены и закрытый конструктор. Закрытый конструктор не допускает создания экземпляров класса. Преимущество применения статических классов заключается в том, что компилятор может проверить отсутствие случайно добавленных членов экземпляров. Таким образом, компилятор гарантирует невозможность создания экземпляров таких классов.

Статические классы запечатаны, поэтому их нельзя наследовать. Они не могут быть унаследованы ни от каких классов, кроме Object. Статические классы не могут содержать конструктор экземпляров, но могут содержать статический конструктор. Нестатические классы также должен определять статический конструктор, если класс содержит статические члены, для которых нужна нетривиальная инициализация. Дополнительные сведения см. в разделе Статические конструкторы (Руководство по программированию в C#).

 

 

37 Наследование является одним из трех

основополагающих принципов объектно-ориентированного

программирования, поскольку оно допускает создание

иерархических классификаций. Благодаря наследованию

можно создать общий класс, в котором определяются

характерные особенности, присущие множеству связанных

элементов. От этого класса могут затем наследовать другие,

более конкретные классы, добавляя в него свои

индивидуальные особенности.

В языке С# класс, который наследуется, называется

базовым, а класс, который наследует, — производным.

Следовательно, производный класс представляет собой

специализированный вариант базового класса. Он наследует

все переменные, методы, свойства и индексаторы,

определяемые в базовом классе, добавляя к ним свои собственные

элементы.

Основы наследования

Поддержка наследования в С# состоит в том, что в

объявление одного класса разрешается вводить другой класс. Для

этого при объявлении производного класса указывается

базовый класс. Рассмотрим для начала простой пример.

Ниже приведен класс TwoDShape, содержащий ширину

и высоту двухмерного объекта, например квадрата,

прямоугольника, треугольника и т.д.

// Класс для двумерных объектов,

class TwoDShape {

public double Width;

public double Heights-

public void ShowDimO {

Console.WriteLine("Ширина и высота равны " +

Width + " и " + Height);

}

}

Класс TwoDShape может стать базовым, т.е. отправной точкой для создания классов,

описывающих конкретные типы двумерных объектов. Например, в приведенной ниже

программе класс TwoDShape служит для порождения производного класса Triangle.

Обратите особое внимание на объявление класса Triangle.

// Пример простой иерархии классов.

using System;

// Класс для двумерных объектов,

class TwoDShape {

public double Width;

public double Height;

public void ShowDimO {

Console.WriteLine("Ширина и высота равны " +

Width + " и " + Height);

}

}

// Класс Triangle, производный от класса TwoDShape.

class Triangle: TwoDShape {

public string Style; // тип треугольника

// Возвратить площадь треугольника,

public double Area() {

return Width * Height / 2;

}

// Показать тип треугольника,

public void ShowStyleO {

Console.WriteLine("Треугольник " + Style);

}

class Shapes {

static void Main() {

Triangle tl = new Triangle();

Triangle t2 = new Triangle();

tl.Width = 4.0;

tl.Height = 4.0;

tl.Style = "равнобедренный";

t2.Width = 8.0;

t2.Height = 12.0;

t2.Style = "прямоугольный";

Console.WriteLine("Сведения об объекте tl: ");

tl.ShowStyleO;

tl.ShowDimO;

Console.WriteLine("Площадь равна

Console.WriteLine();

+ tl.AreaO);

Console.WriteLine("Сведения об объекте t2: ");

t2.ShowStyle();

t2.ShowDim();

Console.WriteLine("Площадь равна " + t2.Area()

}

}

При выполнении этой программы получается следующий результат.

Сведения об объекте tl:

Треугольник равнобедренный

Ширина и высота равны 4 и 4

Площадь равна 8

Сведения об объекте t2:

Треугольник прямоугольный

Ширина и высота равны 8 и 12

Площадь равна 4 8

В классе Triangle создается особый тип объекта класса TwoDShape (в данном

случае — треугольник). Кроме того, в класс Triangle входят все члены класса TwoDShape,

к которым, в частности, добавляются методы Area () и ShowStyle (). Так, описание

типа треугольника сохраняется в переменной Style, метод Area () рассчитывает и

возвращает площадь треугольника, а метод ShowStyle () отображает тип треугольника.

Обратите внимание на синтаксис, используемый в классе Triangle для

наследования класса TwoDShape.

class Triangle: TwoDShape {

Этот синтаксис может быть обобщен. Всякий раз, когда один класс наследует от

другого, после имени базового класса указывается имя производного класса,

отделяемое двоеточием. В С# синтаксис наследования класса удивительно прост и удобен в

использовании.

В класс Triangle входят все члены его базового класса TwoDShape, и поэтому

в нем переменные Width и Height доступны для метода Area (). Кроме того, объекты

tl и t2 в методе Main () могут обращаться непосредственно к переменным Width и

Height, как будто они являются членами класса Triangle. На рис. 11.1 схематически

показано, каким образом класс TwoDShape вводится в класс Triangle.

Несмотря на то что класс TwoDShape является базовым для класса Triangle, в то

же время он представляет собой совершенно независимый и самодостаточный класс.

Если класс служит базовым для производного класса, то это совсем не означает, что он

не может быть использован самостоятельно. Например, следующий фрагмент кода

считается вполне допустимым.

TwoDShape shape = new TwoDShape();

shape.Width = 10;

shape.Height =20;

shape.ShowDim();

Разумеется, объект класса TwoDShape никак не связан с любым из классов,

производных от класса TwoDShape, и вообще не имеет к ним доступа.

Ниже приведена общая форма объявления класса, наследующего от базового класса.

class имя_производного_класса: имя_базового_класса {

// тело класса

}

Для любого производного класса можно указать только один базовый класс. В С# не

предусмотрено наследование нескольких базовых классов в одном производном

классе. (В этом отношении С# отличается от С-н-, где допускается наследование нескольких

базовых классов. Данное обстоятельство следует принимать во внимание при переносе

кода C++ в С#.) Тем не менее можно создать иерархию наследования, в которой

производный класс становится базовым для другого производного класса. (Разумеется, ни

один из классов не может быть базовым для самого себя как непосредственно, так и

косвенно.) Но в любом случае производный класс наследует все члены своего базового

класса, в том числе переменные экземпляра, методы, свойства и индексаторы.

Главное преимущество наследования заключается в следующем: как только будет

создан базовый класс, в котором определены общие для множества объектов

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

производных классов. А в каждом производном классе может быть точно выстроена своя

собственная классификация. В качестве примера ниже приведен еще один класс,

производный от класса TwoDShape и инкапсулирующий прямоугольники.

// Класс для прямоугольников, производный от класса TwoDShape.

class Rectangle: TwoDShape {

// Возвратить логическое значение true, если

// прямоугольник является квадратом,

public bool IsSquareO {

if(Width == Height) return true;

return false;

}

// Возвратить площадь прямоугольника,

public double Area() {

return Width * Height;

}

}

В класс Rectangle входят все члены класса TwoDShape, к которым добавлен метод

IsSquare (), определяющий, является ли прямоугольник квадратом, а также метод

Area (), вычисляющий площадь прямоугольника.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...