Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 39

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 33 34 35 36 37 38 < 39 > 40 41 42 43 44 45 .. 320 >> Следующая

¦ftrg: -1000 I
Й1»уг -cfodnode
Hello Uu1-IiIt I
D:\Teni>> 8
Рис. 2.1. Программа обрабатывает переданные ей параметры командной ст|х>ки
Цикл для последовательной обработки всех параметров командной строки можно организовать и другим способом, использовав конструкцию foreach (подробнее о ней будет рассказано ниже в этой главе):
public static int Main (string[] ггег)
{
foreach (string s 1n args)
Console.WriteLine("Arg: {0}". s);
I
Естественно, использовать или не использовать параметры командной строки — зависит только от программиста, создающего приложение.
Создание объектов: конструкторы
Во всех объектно-ориентированных языках четко различаются понятия «класс* и «объект». Класс - это определяемый пользователем тип данных (user-defined type, U DT). Класс можно представить себе как чертеж, по которому организуются его члены. В отличие от класса объектом называется конкретный экземпляр определенного класса, с помощью которого обычно и производятся определенные действия в программе.
Единственный способ создания нового объекта в С# - использовать ключевое слово new. Давайте рассмотрим, как создаются объекты, на следующем примере:
//:¦'¦ будут создан* при вызове метода MainO !Using System; class HelloClass {
public static int Main(string[] args)
* Il Новый ооьект можно создать в одной строке HelloClass el - new Неї loClass«):
или в двух: HelloClass c2; с2 - new HelloClassO;
return 0:
}
}
Ключевое слово new означает, что среде выполнения следует выделить необходимое количество оперативной памяти под экземпляр создаваемого объекта. Вы-
Анатомия класса 79
деление памяти производится из находящейся в распоряжении среды
полнения .NET (managed heap - управляемой кучи). В нашем примере в оперативной памяти созданы два объекта с! и с2, каждый из которых является экземпляром типа HeI loClass. В С# переменные класса — это ссылки на объект в памяти, но не сами объекты. Поэтому cl и с2 — это ссылки на два отдельных объекта, находящиеся в оперативной памяти (точнее, в области управляемой кучи). Подробнее
об этом будет рассказано в главе 3.
В нашем примере объекты создаются при помощи конструктора по умолчанию. Компилятор С# автоматически снабжает конструктором по умолчанию любой класс. Если есть необходимость, вы можете переопределить этот конструктор, заставив его выполнять нужные вам действия. Как и в С++, конструктор класса по умолчанию — это конструктор, который не принимает никаких параметров. Однако в С# имеется существенное отличие от C++ в отношении конструктора по умолчанию. В C++ при создании объекта при помощи конструктора по умолчанию переменные остаются неинициализированными (то есть в них могут быть любые случайные значения). В С# конструктор по умолчанию (как и все другие конструкторы), если не указано иное, присваивают всем данным состояния (например, переменным-членам) значения по умолчанию - в большинстве случаев 0. Кажется, что отличие небольшое, но в некоторых ситуациях это свойство конструкторов
С# убережет вас от ошибок.
В большинстве случаев класс помимо конструктора по умолчанию снабжается и другими конструкторами — принимающими параметры. Использование такого конструктора - самый простой способ инициализировать состояние объектав момент его создания, установив нужные вам значения. В качестве примера мы еще раз обратимся к классу HeI 1 oCl ass. При этом мы придадим этому классу несколько переменных-членов, значения которых можно настраивать, конструктор с параметрами, а также переопределим конструктор по умолчанию — конструктор без параметров.
// HelioCtass с конструктора* using System;
class HelloClass
{
Il Конструктор по уиолчанию присвоит переменный-членам значения по умолчанию
public HeIIoCl ass О
{
Console.WrIteLine("Default ctor called!"};
}
// Наш собственный конструктор присвоит специальные значения
public HelloClassdnt х, int у)
{
Console.WriteLinet"Custom ctor called!"); intX x; intY - у;
}
// Объявляем переменные члены класса public int intX, intY;
// Точка входа для программы
public static int Main(string[] args)
80 Глава 2 (
:i
Запустив эту программу, можно убедиться, что конструктор по умолчанию действительно присвоил переменным-членам значения по умолчанию (нулевые), а конструктор с параметрами присвоил переменным-членам значения, соответствующие этим параметрам (рис. 2.2).
ЬЯ D:\CSharpBook\LubsVChapter2\HclIoThcre\tiin\w -in
; Ни ........¦'4'I E і lirt <<іс*^:;. . .
Default ctoi* саЛІвії! ct.intX = И ql.intV = В —і
Custupi ctoic CdI]BiI! r.z.tnta = іии c2.intY = 2 ВИ
? . any і'-.' to continue zJ
Fl Г ±1
Рис. 2.2. Результат применения конструкторов
Будет ли происходить утечка памяти?
Обратите внимание, что в программной логике метода Main() не предусмотрено никаких средств для удаления объектов cl и с2:
// Метод с утечкой памяти?
public static int Main(string[] args)
{
HelloClass cl - new HelloClassO:
Console.WriteLineCcl.intX - {0}\ncl.iritY = {l}\n". cl.intx. cl.intY): HelloClass c2 - new HelloClass(100, 200):
Предыдущая << 1 .. 33 34 35 36 37 38 < 39 > 40 41 42 43 44 45 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100