русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Атрибуты][модификаторы]struct имя_структуры


Дата добавления: 2013-12-23; просмотров: 1175; Нарушение авторских прав


Базовый класс System.Enum

Все перечисления в С# происходят от единого базового класса System.Enum. Конеч­но же, в этом базовом классе предусмотрены методы, которые могут существенно облегчить вашу работу с перечислениями. Первый метод, о котором необходимо упомянуть, — это статический метод GetUnderlyingType(), который позволяет полу­чить информацию о том, какой тип данных используется для представления чис­ловых значений элементов перечисления:

// Получаем тип числовых данных перечисления (в нашем примере это будет System.Byte)

 

Console.WriteLine(Enum.GetUnderlyingType(typeof(EmpType)));

Кроме того, вы можете получать значимые имена элементов перечисления по их числовым значениям. Эту работу за вас выполняет статический метод Enum.Format().В нашем примере переменной типа EmpType соответствовало имя элемента пере­числения Contractor (то есть эта переменная разрешалась в числовое значение 100). Для того чтобы узнать, какому элементу переменной соответствует это числовое значение, необходимо вызвать метод Enum.Format, указать тип перечисления, чис­ловое значение (в нашем случае через переменную) и флаг форматирования (в на­шем случае - G, что означает вывести как тип string, можно использовать также флаги х — шестнадцатеричное значение и d — десятичное значение):

// Этот код должен вывести на системную консоль строку //"You are a Contractor

 

EmpType fred;

fred = EmpType.Contractor;

Console.WriteLine("You area {0}”, Enum.Format(typeof(EmpType), fred, "G"));

В System.Enum предусмотрен еще один полезный статический метод — GetValues(). Этот метод возвращает экземпляр System.Array, при этом каждому элементу мас­сива будет соответствовать член указанного перечисления:

// Получаем информацию о количестве элементов в перечислении



Array obj = Enum.GetValues(typeof(EmpType));

Console.WriteLine('This enum has {0} members.", obj.Length);

 

// А теперь выводим имена элементов перечисления в формате string и соответствующие им числовые значения:

 

foreach(EmpType e in obj) {

Console.Write("String name: {0}", Enum.Format(typeof(EmpType), e, "G"));

Console.Write( “({0})", Enum.Format(typeof(EmpType), e, "D"));

Console.Write(“ hex: {0}\n", Enum.Format(typeof(EmpType), e, "X"));

}

Кроме того, в классе System.Enum предусмотрено очень полезное свойство IsDefined. Оно позволяет определить, является ли выбранная вами символьная строка эле­ментом указанного перечисления. Например, предположим, что вам потре­бовалось узнать, является ли значение Salesperson элементом перечисления EmpType:

 

// Есть ли в EmpType элемент Salesperson?

if(Enum.IsDefined(typeof(EmpType), "Sa1esPerson"))

Console.WriteLine(“Yes, we have salespeople.");

else

Console.WriteLine(“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.WriteLine(“Fran's value is less than Joe's");

 

Определение структур в С#

 

Структуры С# можно рассматривать как некую особую разновидность классов. С классами структуры роднит многое: для структур можно определять конструк­торы (только принимающие параметры), структуры могут реализовывать интер­фейсы, структуры могут содержать любое количество внутренних членов. Для структур С# не существует единого базового класса (тип System.Structure в С# не предусмотрен), однако косвенно все структуры являются производными от типа ValueType. Основное назначение ValueType заключается в том, чтобы обеспечить типы данных, производные от System.Object, членами для работы с эти­ми типами данных как со структурными (value-based), когда значения передаются как локальные копии, а не как ссылки на области в памяти.

Синтаксис объявления структуры аналогичен синтаксису объявления класса:

 

[:список_интерфейсов]

{тело_структуры}

 

Вот простой пример структуры С#:

// Вначале нам потребуется перечисление

enum EmpType : byte {

Manager = 10,

Grunt = 1,

Contractor = 100,

VP = 9

}

struct Employee {

public EmpType title; // Одно из полей структуры –

// перечисление, определенное выше

public string name;

public short deptID:

}

class StructTester {

public static int Main(string[] args) {

// Создаем и присваиваем значения Фреду

Employee fred;

fred.deptID = 40;

fred.name = "Fred";

fred.title = EmpType.Grunt;

return 0;

}}

Мы создали структуру Employee (для нее была выделена память в области стека) и теперь можем обращаться к каждому члену структуры, используя формат имя_структуры.имя_члена. Вполне возможно, что в реальном приложении для более удобного присвоения значений членам структуры нам придется определить свой собственный конструктор или несколько конструкторов. В связи с этим обходимо помнить, что вы не можете переопределить конструктор для структуры по умолчанию — тот конструктор, который не принимает параметров, ваши конструкторы обязательно должны принимать один или несколько параметров:

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

 

struct Employee {

// Поля

public EmpType title;

public string name;

public short deptID;

// Конструктор

public Employee (EmpType et, string n, short d) {

title = et;

name = n;

deptID = d;

}}

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

 

class StructTester {

// Создаем Мэри и присваиваем ей значения при помощи конструктора

public static int Main(string[] args) {

// Длявызова нашего конструктора мы обязаны использовать

// ключевое слово new

Employee maгу =new Employee (EmpType.VP, "Mary", 10);

return 0;

}}

Конечно же, структуры могут быть использованы в качестве принимаемых и возвращаемых методами параметров. Например, пусть в нашем классе StructTester будет предусмотрен метод DisplayEmpStats ():

// Извлекаем интересующую нас информацию из структуры Employee

public void Displ ayEmpStats (Employee e) {

Console.WriteLine(“Here is {0}\'s info:", e.name);

Console.WriteLine("Department ID: {0}", e.deptID);

Console.WriteLine(“Title: {0}", Enum.Format(typeof(EmpType), e.title, "G"));

}

 

Так можно выполнить программу с использованием DisplayEmpStats():

 

// Выведен данные о Мэри и Фреде:

public static intMain(string[] args) {

StructTester t = new StructTester();

t.DisplayEmpStats(mary);

t. DisplayEmpStats(fred);

return 0;

}

 



<== предыдущая лекция | следующая лекция ==>
Атрибуты][модификаторы]enum имя_перечисления | Определяем пользовательские пространства имен


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.005 сек.