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

 

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

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

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 47 48 49 50 51 52 < 53 > 54 55 56 57 58 59 .. 320 >> Следующая

Foo f2 = r,ev fcou: f2.intFoo = 993;
Foo f3 - new Foot): f3.intFoo = 6;
В отличие от обычных данных статические данные совместно используются всеми объектами того класса, в котором эти данные были определены. Вместо локальных копий переменной в каждом из объектов существует единственная копия статической переменной, которой пользуются все объекты. Предположим, что у нас есть класс Airplane с единственной статической переменной NumberlnTheAi Пусть значение этой переменной увеличивается на единицу всякий раз, когда у нас срабатывает конструктор нашего класса:
// Обратите внимание на применение ключевого слова "static" class Airplane
// Эта статическая переменная будет совместно испольэоааться всеми
// объектами Airplane
private static int NumberInTheAlr = 0;
public airolапеO {
NumberlnTheAiг++;
}
//Метод для получения значения NumberlnTrieAir экземпляр
// объекта Airplane
public int GetNumberFromObjectO (return NumberlnTheAi г;}
Il Статический нетод - для получения значения NumberlnTheAir напряну» // через класс Airplane
public static int GetNumberO (return NumberlnTheAir;}
}
Обратите внимание на два определенных в классе А1 грі апе метода. Оба они но:^ вращают текущее количество объектов Al грі апе, которое будет создано в нашем при -ложении. Однако для того, чтобы воспользоваться методом GetNumberFromObjectO, нам необходимо создать по крайней мере один экземпляр объекта Ai грі апе, через который будет производиться вызов этого метода. Для того чтобы воспользоваться методом GetNumber (), никаких объектов создавать не нужно, поскольку этот метод огре -делен как статический. Вот пример приложения, в котором используются эти методы:
i__
114 Глава 2 * Основы языка С#
// Экспериментируем со статическими членами
class StaticApp
{
public static int Main(string[] args) {
I! Создадим несколько самолетов Ai rpl line а і = new Л і грі ..пес і Airplane a2 = new AirplaneO;
Il Сколько взлетело самолетов?
Console.WriteLlnet"Number of planes: {0}". al.GetNumberFromObjectt)}:
Uiosnle Ur^tA^itCNunocr of planes: {OS". Ai rpl me .GelNunterf.)):
Il Добавим самолетов Airplane аЗ = new Ai rplane(): Airplane a4 = new AirplaneO;
I) A теперь сколько?
Console.WriteLineC"Number of planes: {0}". a3.GetNumberFromObjectO):
Console Wr1tcL1ne(-Number of planes: {0}", A^lancGettoberO); return 0.
J
}
Результат выполнения нашей программы представлен на рис. 2.17.
. •-- . ¦ ііі«.>»к-.1,:ї>і : і ¦¦¦¦:> і 2\... [iS?
Hill lilt; J- of pldfies- 2
Nnribei* of planes= 2
Nunbet* of planes і 4
Nun be г- of planes= 4
Press any key to continue
T
-iE!
Рис. Статические данные совместно используются всеми объектами класса
Как мы видим по работы нашего статические пе-
ременные совместно используются всеми объектами класса, в котором они были определены. В этом и состоит их назначение. Можно сказать, что статические данные предназначены для хранения информации на уровне всего класса, а не отдельных объектов.
Код приложения StaticTypes можно найти в подкаталоге Chapter 2.
Интересное рядом: некоторые статические члены класса Environment
Environment — это еще один из множества классов, определенных в пространстве имен System. В этом классе определено несколько статических типов, которые можно использовать для получения полезной информации об операционной системе, в которой будет работать ваше приложение, а также о самой среде выполнения .NET. Рассмотрим применение некоторых из этих статических типов на примере:
Статические методы и методы экземпляров 115
// Вот несколько Сно далеко не все) полезных статических типов класса Environment using System; class Environment; {
public static int Main(stringt] args) {
Il Под какой операционной системой иы работаем?
Console.WriteLi neC'Current OS: {0}". Environment.OSVerslon);
Il Текущий каталог?
Console.WriteLineCCurrent Directory: {0}". Environment.CurrentDirectory)
Il А теперь выведен список логических дисков: stringu drives = Environment. GetLogical Drives О;
fort Irrt 1 - О; і < drives. Length; 1++)
Console.WrIteLine("Drive {0} : {1}". i. drives[i]);
Il А какая версия ппатфорны .NETy нас используется?
Console.WriteLineC'CurrentVeersion of .NET: {0}". Environment.Version);
return 0;
}
I
Результат работы этой программы, представлен на рис. 2.18.
I' ' D:\CSharpBookVL3bs\thapter г\Р1дНогтЧру .hin\Df*ug\Pi " -la
Current Ou : Microsnft Uinriows NT Б.0.2195,0 І
Current Directory = D:\CSIirtt4iIloob\La))s\Cliaptei> 2\P I atf пгтКруЧЬіп \Debug
Di'iue O : C:\ Drive 1 : D:\ Dvive 2 : E:\ Di'iue 3 : F:\ 'Current version of .НЕТ: 1.0.2&1S.1
Гг.- an^J: у to continue zJ
M T JJ 4.
Рис. 2.18. Работа с переменными окружения в С#
Код приложения PlatformSpy можно найти в подкаталоге Chapter 2.
Модификаторы для параметров методов
В большинстве случаев методы используют параметры. Если у вас есть опыт работы с СОМ, вы, безусловно, знакомы с атрибутами [in], [out] и [in, out] в IDL. Классические объекты СОМ используют эти атрибуты для того, чтобы однозначно определить направление передачи данных (и решить связанные с этим вопросы выделения памяти) для параметров метода, связанных с указанным интерфейсом. Несмотря на то что в С# IDL не используется, однако атрибуты для параметров методов (они называются модификаторами параметров) остались. Перечень этих модификаторов представлен в табл. 2.9.
Предыдущая << 1 .. 47 48 49 50 51 52 < 53 > 54 55 56 57 58 59 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100