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

 

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

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

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

/,
Рис. 2.24. Возможности System.Enum
Определение в С# 131
Кроме того, в классе System. Enum предусмотрено очень полезное свойство IsDef і netL Оно позволяет определить, является ли выбранная вами символьная строка элементом указанного перечисления. Например, предположим, что вам потребовалось узнать, является ли значение Salesperson элементом перечисления EmpType:
// Есть ли в EmpType элемент Salesperson?
і f{Enum. IsDef і ned Ctypeof(EmpType)."Sa1esPerson"))
Console. WriteLine ("Yep. we have sales people."!:
el se
Consols; Wn tel.1 net "No, we have no profits...");
Последнее, о чем необходимо упомянуть в этом разделе: перечисления С# под держивают работу с большим количеством перегруженных операторов, которые могут выполнять различные операции с числовыми значениями переменных. Например:
//Канону из этих двух переменных-членов перечисления соответствует // большее числовое значение? EmpType Joe = EmpType.VP: EmpType Fran - EmpType, Grunt:
if (Joe < Fran)
Console.WriteLine{"Joe's value is less than Fran's");
else
Console.WriteLinef'Fran's value is less than Joe's"):
Код приложения Enum можно найти в подкаталоге Chapter 2. Определение структур в С#
Мы уже сталкивались со структурами в начале этой глзвы, однако эти конструкции С# заслуживают более подробного рассмотрения. Во многих отношениях структуры С# можно рассматривать как некую особую разновидность С классами структуры роднит многое: для структур можно определять конструкторы (только принимающие параметры), структуры могут реализовывать интерфейсы, структуры могут содержать любое количество внутренних членов. Для структур С# не существует единого базового класса (тип System. Structure в С# не предусмотрен), однако косвенно все структуры являются производными от типа ¦ ValueType. Вспомним, что основное назначение ValueType заключается в том, чтобы обеспечить типыданных, производные от System. Object, членами для работы с этими типами данных как со структурными (value-based), когда значения передаются как локальные копии, а не как ссылки на области в памяти. Вот простой пример структуры С#:
// Вначале нам потребуется наше перечисление
enum EmpType ; byte
{
Manager = 10. Grunt = 1. Contractor - 100. VP - 9
struct EMPLOYEE
132
Глава 2 • Основы языка С#
public EmpType title; // Одно из полей структуры - перечисление,
// определенное выше
public string name; public short deptID;
}
. class :'. .•.:. л • {
public static int MainCstringl] args)
{
Il Создаем и присваиваем значения Фреду
EMPLOYEE fred: fred.deptlD - 40: fred.name = "Fred"; fred.title = EmpType.Gruht; return 0:
}
}
Мы создали структуру EMPLOYEE (для нее была выделена память в области стека) и теперь можем обращаться к каждому члену структуры, используя формат имя_структуры.иня_члена. Вполне возможно, что в реальном приложении для более удобного присвоения значений членам структуры нам придется определить свой собственный конструктор или несколько конструкторов. В связи с этим необходимо помнить, что вы не можете переопределить конструктор для структуры по умолчанию — тот конструктор, который не принимает параметров. Все ваши конструкторы обязательно должны принимать один или несколько параметров:
// ¦ структур можно определить ¦ но все созданные конструкторы должны
принимать параметры struct EMPLOYEE і
Il Поля
public EmpType title: public string name; public short deptlD;
// Конструктор
public EMPLOYEE (EmpType et. string n. short d> {
title - et;
name ¦ n; deptID - d;
}
}
При помощи такого определения структуры, в котором предусмотрен конструктор, вы можете создавать новых сотрудников следующим образом:
class StructTester
{
// Создаем Мэри и присваиваем ей значения при помощи конструктора
public static int Main(string[] args)
{
Ii Для вызова нашего конструктора ны обязаны использовать // клюяевое слово new
EMPLOYEE тагу - new EMPLOYEE (EmpType .VP. "Mary". 10):
Еще раз об упаковке и распаковке 133
return 0;
^ }
Конечно же, структуры могут быть использованы в качестве принимаемы'; и возвращаемых методами параметров. Например, пусть в нашем классе StructTester будет предусмотрен метод DisplayBnpStdt^O:
.// Извлекаем интересующую нас информацию из структуры EMPLOYEE
public void Di splayEnipStats( EMPLOYEE e)
{
Console.WriteLineC'Here is {0}Vs info:", e.name): Console.WriteLineC'Department ID: (0?", e.deptlD);
Console.WriteLineC'Title: {0}", Enum.Format(typeof(EmpType). e.title, "G"));
}
Так можно выполнить программу с использованием Disp'ayErpStcts' ¦•;
// Выведен данные о Мэри и Фреде: public static int Main(string[] args)
StructTester t = new StructTester«): t,DisplayEmpStats(mary); t. DisplayEmpStats(fred):
return 0;
}
Результат работы этой программы представлен на рис. 2.25.
Щ D:\DocumenUand Settings'^ Administrator JK)MEDn. И ІДИ
Нєґе is nary S info: Д|
Department ID: 18
Title: UP Щ
Here is Fred's info: Department ID: 4B
I if. 1,; - Grunt 1}
Press any l«sy to continue
Рис. 2.25. Возможности структур C#
Предыдущая << 1 .. 54 55 56 57 58 59 < 60 > 61 62 63 64 65 66 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100