Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 303

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 297 298 299 300 301 302 < 303 > 304 305 306 307 308 309 .. 404 >> Следующая


В классе GenericRow (см. рис. слева) определяются свойства Name н Description; необходимый для этого код приводится ниже. Данный класс является производным от класса DataRow — класса, являющегося базовым классом для всех строк баз данных, использующихся в системе.

В нашем примере два класса являются производными от класса GenericRow, один из которых представляет автора (AuthorRow), а второй — книгу (воокяок). Оба класса обладают дополнительными свойствами, которые привязываются к полям базы данных:

Syitwn.Dita. DataRow

GanarlcRow

«Name: String ¦Description: String

AuthorRow

¦AuthorlD: kit +Hlr*Date: Data

BookRow

+B00WD: Int +Author1D: int ¦ISBN: String

H Из сечение из файла DatabaseAttributea.es /// <suimary>

/// Вазовый класс строки — в ней описывается t Н столбцы Name ж Description /// </summary >
public abstract class GenericRow : DataHow

i

1Ц <8ummaiy>

III Создание объекта III </вшшигу>

III cporam name3¦ builder• >Передается из System.Data</param> public GenericRow (Syet a.Data.DataRowBuilder builder)

: base (builder]

1

]

III <summary>

III Столбец, предназначенный для названия записи III </вшгтагу>

[DatabaseColutmf'МАМЕ',ColumnDomain.String,Order=10,Size*641] public string Keune (

get { return (string) thi*('NAME']; ) set ( this('NAME'] ¦ value; }

)

III <sunmary>

III Столбец, предназначенный дня описания, который допускает ///в качестве значения NULL /// </suntnary>

[DatabaseColimm (' DESCRIРТХОЫ", ColumnDomain.. String, Null able» true,

0rder=ll,si*e»1000)1

- public string Sescripc inn (

get ( return (string) this['DESCRIPTION'!; ) set ( this ('DESCRIPTION'] * value; )

}

Тот факт, что класс является производным от DataRow, говорит о необходимости создания конструктора, который будет принимать единственный параметр — DatnRowBuilder, Этот КЛЭСС НЭХОДНТСЯ D модуле System.Data.

Далее описываются два свойства — Name И Description, И ДЛЯ каждого из них задаются соответствующие атрибуты:

t Databas оСоlumrt('МАМБ',ColumnDomain.StringIOrder=l0,Size=64)]

В этой строке описывается столбец с именем name, определяется его домен как строка, имеющая размер 64 символа, и задается его порядковый номер, равный 10. Это сделано таким образом, поскольку прн создании таблиц баз данных автор предпочитает, чтобы поля с основными ключами всегда выводились перед всеми остальными полями, содержащимися в данной таблице. Присваивание значения, равного 10, оставляет возможность для включения большого количества идентифицирующих полей. При количестве полей в основном ключе, большем 10, потребует проводить разработку таблицы заново!

Столбцу описания также присваивается название, домен и размер. Свойству Nullable присваивается значение true, поэтому от нас не требуется обязательного определения столбца описания. Другой возможностью является определения свойства, которому присваивается значение по умолчанию в виде пустой строки, что позволит избежать использование значений null в базе данных. В качестве порядкового номера столбцу присваивается номер 11, с тем чтобы столбцы с названием н описанием в генерируемой схеме всегда находились рядом:

[Databas«Column('DESCRIPTION',ColumnDomain.Str ing,Nullable*true,

Order«ll,Size*1000)]
648 Глава 22

В средствах доступа для каждого из этих свойств определяются методы get и set, которые являются строго типизированными, в результате чего для столбца со значениями типа string они возвращают также значение типа string:

get { return (string) this['DESCRIPTION']; } set t ehiat•description-] = value ; }

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

Строка AuthorRow создается следующим образом:

//Из печение из файла DatabaeeTables.cs III <aummary>

III Таблица Author, производная от GenericRow JH </зиптоаху>

[DatabaseTabie('AUTHOR')] public class AuthorRow ; GenericRow -{

public AuthorRow (DataRowBuilder builder)

: base (builder)

(

)

/// <sunnnary>

lit Поле с основным ышчом

III </suiranary>

[DatabaseColunuif 'AUTHORED'.ColumnDomain.Long,Order-1) ] .

public long AuthorlD (

get ( return (long) this['AUTHOtt_ID*] ; J ,

set { thie{'AUTHOR__lD'] = value; )
Предыдущая << 1 .. 297 298 299 300 301 302 < 303 > 304 305 306 307 308 309 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.