Студопедия — Partial 4 страница. public static DBBool operator <(DBInt x, DBInt y) { return x.defined && y.defined?
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Partial 4 страница. public static DBBool operator <(DBInt x, DBInt y) { return x.defined && y.defined?






public static DBBool operator <(DBInt x, DBInt y) {
return x.defined && y.defined? x.value < y.value: DBBool.Null;
}

public static DBBool operator >=(DBInt x, DBInt y) {
return x.defined && y.defined? x.value >= y.value: DBBool.Null;
}

public static DBBool operator <=(DBInt x, DBInt y) {
return x.defined && y.defined? x.value <= y.value: DBBool.Null;
}

public override bool Equals(object obj) {
if (!(obj is DBInt)) return false;
DBInt x = (DBInt)obj;
return value == x.value && defined == x.defined;
}

public override int GetHashCode() {
return value;
}

public override string ToString() {
return defined? value.ToString(): “DBInt.Null”;
}
}

11.4.2 Логический тип базы данных

Представленная ниже структура DBBool реализует трехзначный логический тип. Возможными значениями этого типа являются значения DBBool.True, DBBool.False и DBBool.Null, где член Null указывает неизвестное значение. Подобные трехзначные логические типы часто используются в базах данных.

using System;

public struct DBBool
{
// Три возможных значения DBBool.

public static readonly DBBool Null = new DBBool(0);
public static readonly DBBool False = new DBBool(-1);
public static readonly DBBool True = new DBBool(1);

// Закрытое поле, в котором хранятся значения –1, 0 и 1 для False, Null и True.

sbyte value;

// Закрытый конструктор экземпляра. Значение этого параметра должно быть –1, 0 или 1.

DBBool(int value) {
this.value = (sbyte)value;
}

// Свойства для проверки значения объекта DBBool. Возвращает true, если этот объект
// DBBool имеет конкретное значение, в обратном случае — значение false.

public bool IsNull { get { return value == 0; } }

public bool IsFalse { get { return value < 0; } }

public bool IsTrue { get { return value > 0; } }

// Неявное преобразование из bool в DBBool. Значение True сопоставлено DBBool.True, а значение
// false — значению DBBool.False.

public static implicit operator DBBool(bool x) {
return x? True: False;
}

// Явное преобразование из DBBool в bool. Вызывает исключение, если
// конкретный объект DBBool имеет значение Null, в обратном случае возвращает true или false.

public static explicit operator bool(DBBool x) {
if (x.value == 0) throw new InvalidOperationException();
return x.value > 0;
}

// Оператор равенства. Возвращает Null, если один из операторов равен Null, в обратном случае
// возвращает True или False.

public static DBBool operator ==(DBBool x, DBBool y) {
if (x.value == 0 || y.value == 0) return Null;
return x.value == y.value? True: False;
}

// Оператор неравенства. Возвращает Null, если один из операторов равен Null, в обратном случае
// возвращает True или False.

public static DBBool operator!=(DBBool x, DBBool y) {
if (x.value == 0 || y.value == 0) return Null;
return x.value!= y.value? True: False;
}

// Оператор логического отрицания. Возвращает True, если операнд имеет значение False, Null,
// если операнд имеет значение Null, либо False, если операнд имеет значение True.

public static DBBool operator!(DBBool x) {
return new DBBool(-x.value);
}

// Оператор логического AND. Возвращает False, если один из операндов имеет значение False,
// значение Null, если один из операндов имеет значение Null, в обратном случае — True.

public static DBBool operator &(DBBool x, DBBool y) {
return new DBBool(x.value < y.value? x.value: y.value);
}

// Оператор логического OR. Возвращает True, если один из операндов имеет значение True,
// значение Null, если один из операндов имеет значение Null, в обратном случае — False.

public static DBBool operator |(DBBool x, DBBool y) {
return new DBBool(x.value > y.value? x.value: y.value);
}

// Оператор определенной истины. Возвращает True, если операнд имеет значение True, в обратном случае
// значение False.

public static bool operator true(DBBool x) {
return x.value > 0;
}

// Оператор определенной лжи. Возвращает True, если операнд имеет значение False, в обратном случае
// значение False.

public static bool operator false(DBBool x) {
return x.value < 0;
}

public override bool Equals(object obj) {
if (!(obj is DBBool)) return false;
return value == ((DBBool)obj).value;
}

public override int GetHashCode() {
return value;
}

public override string ToString() {
if (value > 0) return "DBBool.True";
if (value < 0) return "DBBool.False";
return "DBBool.Null";
}
}


12. Массивы;

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

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

Каждое измерение массива имеет сопоставленную ему длину, выраженную в виде целого неотрицательного числа. Длины измерений не являются частью типа массива, они устанавливаются при создании экземпляра массива с конкретным типом во время выполнения. Длина измерения определяет допустимый диапазон индексов для этого измерения: для измерения с длиной N индексы могут находиться в диапазоне от 0 до N – 1 включительно. Общее число элементов в массиве является совокупностью длин всех измерений массива. Если одно или несколько измерений массива имеют нулевую длину, массив считается пустым.

Элемент массива может иметь любой тип, в том числе тип массива.

12.1 Типы массива;

Тип массива записывается как тип_не_массива;, за которым следуют спецификации_ранга;:

тип_массива:
тип_не_массива спецификации_ранга

тип_не_массива:
тип

спецификации_ранга:
спецификация_ранга
спецификации_ранга спецификация_ранга

спецификация_ранга:
[ разделители_размерностей (н/о) ]

разделители_размерностей:
,
разделители_размерностей,

Тип_не_массива; является одним из типов;, которые сами по себе не являются типом_массива;.

Ранг типа массива задается левой спецификацией_ранга; в типе_массива;: спецификация_ранга; указывает, что массив имеет ранг, равный единице плюс число меток «,» в этой спецификации.

Тип элемента массива представляет собой тип, полученный в результате удаления крайней левой спецификации_ранга;:

· Тип массива в форме T[R] указывает массив с рангом R и типом элемента (типом_не_массива) T.

· Тип массива в форме T[R][R1]...[RN] указывает массив с рангом R и типом элемента T[R1]...[RN].

В результате данные спецификации_ранга; считываются слева направо перед последним типом_не_массива элемента. Тип int[][,,][,] указывает одномерный массив трехмерных массивов из двумерных массивов значений с типом int.

Во время выполнения значение типа массива может быть равно null или может содержать ссылку на экземпляр массива этого типа.







Дата добавления: 2015-09-07; просмотров: 457. Нарушение авторских прав; Мы поможем в написании вашей работы!



Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Логические цифровые микросхемы Более сложные элементы цифровой схемотехники (триггеры, мультиплексоры, декодеры и т.д.) не имеют...

Приготовление дезинфицирующего рабочего раствора хлорамина Задача: рассчитать необходимое количество порошка хлорамина для приготовления 5-ти литров 3% раствора...

Дезинфекция предметов ухода, инструментов однократного и многократного использования   Дезинфекция изделий медицинского назначения проводится с целью уничтожения патогенных и условно-патогенных микроорганизмов - вирусов (в т...

Машины и механизмы для нарезки овощей В зависимости от назначения овощерезательные машины подразделяются на две группы: машины для нарезки сырых и вареных овощей...

Приложение Г: Особенности заполнение справки формы ву-45   После выполнения полного опробования тормозов, а так же после сокращенного, если предварительно на станции было произведено полное опробование тормозов состава от стационарной установки с автоматической регистрацией параметров или без...

Измерение следующих дефектов: ползун, выщербина, неравномерный прокат, равномерный прокат, кольцевая выработка, откол обода колеса, тонкий гребень, протёртость средней части оси Величину проката определяют с помощью вертикального движка 2 сухаря 3 шаблона 1 по кругу катания...

Неисправности автосцепки, с которыми запрещается постановка вагонов в поезд. Причины саморасцепов ЗАПРЕЩАЕТСЯ: постановка в поезда и следование в них вагонов, у которых автосцепное устройство имеет хотя бы одну из следующих неисправностей: - трещину в корпусе автосцепки, излом деталей механизма...

Studopedia.info - Студопедия - 2014-2024 год . (0.008 сек.) русская версия | украинская версия