![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Rohoss |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
.Net совместимые классы в Delphi 2009 Часть I (TStringBuilder) Содержание 1 Предисловие 2 Вступление 3 Класс TStringBuilder 3.1 Что это за класс и зачем он нужен 3.2 Представление данных внутри TStringBuilder 3.3 Свойства 3.4 Конструкторы 3.5 Методы 4 Пример использования 5 Заключения Предисловие Решил написать статью о .Net совместимых классах Delphi. В первой части статьи я описал класс TStringBuilder. В остальных частях (если будет время и желания их писать), я хочу описать еще, по крайней мере, четыре класса (TStringReader TStringWriter TStreamReader TStreamWriter). Вступление Технология .Net приобретает всё большую популярность и не удивительно, что Delphi for Win32 перенимает стандарты, существующие в .Net вселенной. Одно из доказательств этому - появления новых методов в классе TObject, который является базовым для всех классов VCL. Эти методы позаимствованы с базового класса .net – System.Object, или просто object. Вот эти методы, все они виртуальны, я вкратце их опишу:
Этот метод сравнивает свой экземпляр (Self) с объектом, который принимает в параметре Obj. В случае, если экземпляры равны друг другу (Obj = Self), возвращает True, иначе соответственно False.
Возвращает Хеш код объекта. Каждый объект имеет уникальный хеш код.
Возвращает строковое представления класса. По умолчанию возвращает тоже, что и ClassName. Что это за класс и зачем он нужен TStringBuilder является аналогом .net класса StringBuilder с пространства имён System.Text. Он был создан для быстрых операций со строками. Кроме того, данный класс имеет несколько очень удобных методов, которых нет в System.String (string). Использования этого класса, может показатся удобным и в Delphi. Рассмотри его. Представление данных внутри TStringBuilder Внутри класса TStringBuilder данные, с которыми работает класс, хранятся внутри protected поля FData, типа TCharArray. это динамический массив символов
Свойства Класс TStringBuilder имеет 4 свойства Capacity
С помощью данного свойства можно узнать или изменить размер памяти, выделенной под FData Chars
С помощью Chars можно узнать или установить определённый символ в массиве FData. Также, в объявлении свойства, мы видим ключевое слово default, означающее, что это свойство используется по умолчанию. Length
Length, получает/задаёт длину FData в символах. MaxCapacity
Возвращает размер максимально возможной используемой памяти для поля FData. Это свойство только для чтения, оно возвращает значения protected поля FMaxCapacity. Значение этого поля можно задать конструктором, а по умолчанию оно задаётся равным MaxInt (2147483647). Конструкторы Конструктор класса TStringBuilder 6 раз перегружен. Рассмотрим все реализации.
Создаёт объект с параметрами по умолчанию.
Создаёт объект, и выделяет первоначальный размер памяти для него, равный параметру aCapacity. Этот конструктор может быть полезен в том случае, когда мы точно знаем, что объект будет содержать большой объем данных, однако, данные будут добавляться малыми блоками.
Позволяет установить изначальное значения(Value) объекта.
Данный конструктор позволяет определить максимальный размер памяти (aMaxCapacity) , допустимый для основного поля данных(FData) нашего объекта и первоначальный размер блока памяти (aCapacity) .
Позволяет установить первоначальное значения(Value) объекта, и блок выделяемой памяти(aCapacity).
Вызывает версию конструктора, принимающего в качестве параметра строку и объем первоначальной памяти для неё, а именно: Create(const Value: string; aCapacity: Integer). Далее, передаёт ему в качестве параметра Value строку, возвращаемую функцией MidStr (которая принимает в качестве параметров, параметры конструктора: Value, StartIndex и length). Вот как это всё выглядит:
Методы Итак, начнём с метода ToString. Вообще, этот метод, как я уже упоминал, возвращает по умолчанию тоже, что и ClassName, но в отличии от последнего, метод ToString, часто перегружают, что и сделано в нашем классе. Используя метод ToString, мы получаем не имя класса TStringBuilder, а данные, которые он содержит в строковом представлении. Другими словами, это как раз тот метод, который нам должен вернуть результат нашей работы со строками. В TStringBuilder, метод ToString два раза перегружен:
Возвращает данные TStringBuilder (FData) в строковом представлении.
Возвращает строку начиная с позиции StartIndex и длиной StrLength. Метод Append в TStringBuilder 19 раз перегружен
Соответственно этот метод добавляет к тем данным, которые уже имеет его поле данных FData, данные переданные в параметре Value и конвертируемые в TCharArray. Однако, обратите внимания на тип данных, возвращаемый этим методом. Метод Append возвращает объект, типа TStringBuilder, а точнее как раз ссылку на самого себя. Благодаря этому становятся возможной следующая конструкция:
Все реализации метода Append я рассматривать не буду, так как и так всё понятно. Передаём значения в параметре Value определённого типа, каждый метод конвертирует значение Value в строку и вызывает вариант метода Append, в котором тип параметра Value является строка. Ну а вариант Append, принимающий в параметре строку имеет уже собственный способ добавления строки к полю FData типа TCharArray. Мы рассмотрим варианты Append, которые имеют иной тип реализации. Как можно догадаться, варианты Append, в которых параметры имеют типы Char и TCharArray, нет смысла конвертировать в строку. Теперь три реализации метода Append, которые принимают больше одного параметра:
Здесь мы передаём в параметре Value символ, который мы хотим добавить, а в параметре RepeatCount указываем, сколько символов (Value) должно добавится. Если написать так:
то в сообщении увидим «Value K, RepeatCount 4 = KKKK».
В этой реализации мы добавляем позицию параметра Value, начинаю со StartIndex и длиной Count:
тут в сообщении увидим «0000345»
Этот Append аналогичен предыдущему, только место string принимает родной TCharArray. Метод AppendFormat
позволяет добавлять форматированный текст
AppendLine, два раза перегружен:
Добавляем пустую строчку (sLineBreak).
Здесь же мы добавляем Value, а затем создаём новую строку. Все методы Insert (19 реализаций) аналогичны методам Append. Естественно, параметр Integer, указывает позицию, куда будет вставлен символ, в отличии от Append, который добавляет Value в конец данных. EnsureCapacity
Этот метод позволяет задать размер памяти, выделенный под FData. Он отличается от метода, обрабатывающего изменения свойства Capacity, тем, что если мы зададим значения параметра aCapacity меньше размера памяти, необходимого для хранения FData, мы не получим AV, как это было бы в случаи со свойством Capacity, память просто не уменьшится. Equals
Метод, позволяющий сравнить свой экземпляр с себе подобным. В сравнении участвуют свойства Length и MaxCapacity, и конечно же FData. Вспомним, что это новый метод класса TObject. Методы Replace
Заменяет в FData символы OldChar на NewChar
Заменяет в FData подстроки OldValue на NewValue
Заменяет в FData символы OldChar на NewChar начиная с позиции StartIndex и до символа номер Count
Заменяет в FData подстроки OldValue на NewValue начиная с позиции StartIndex и до символа номер Count Метод Remove
Позволяет удалить символы, начиная со StartIndex и длиной RemLength Метод CopyTo
копирует символы с поля FData в параметр Destination. Копирования начиная с позиции SourceIndex в FData в позицию DestinationIndex параметра Destination. Количество копируемых символов равно Count. К примеру:
здесь, мы получим такой текст сообщения: «ab45e». Пример В примере мы рассмотрим только два метода: Append и AppendLine. Наш пример будет отображать некоторые свойства наследников класса TControl. Мы напишем две процедуры, одна из них (ShowControlAttributeSB), будет собирать значения свойств с помощью TStringBuilder, вторая (ShowControlAttributeMemo) будет использовать только механизмы, инкапсулированные в TMemo. Итак, разместим на форме TRadioGroup и установим свойства: Name = rgOperationSelect Caption = «Выбираем процедуру для отображения свойств компонентов» Align = alTop ItemIndex = 0 и добавляем в свойстве Items две строки ShowControlAttributeSB (Используем TStringBuilder) ShowControlAttributeMemo (Используем Memo) Далее кидаем TListBox, и соответственно свойства Name = lstControls Align = alLeft И TMemo со свойствами Name = mmoOut Align = alBottom ScrollBars = ssBoth Теперь в правом углу у нас должно остаться свободное место, туда мы положим любые компоненты, в любом количестве. Я положим: TButton, TEdit, TPanel и TLabel, назвав их btn1, edt1, pnl1 и lbl1. Вот код главной формы:
Как видим, в случае со TStringBuilder нам не нужно лишний раз конвертировать форматы, да и код выглядит компактнее. Заключения Ну, вот и всё что касается TStringBuilder'а. Ещё хочу предупредить, что не все параметры методов и конструкторов класса TStringBuilder в Delphi, совпадают с параметрами методов и конструкторов класса StringBuilder в .net. Надеюсь, вам понравилась эта часть статьи, и вы взяли на вооружения описанный здесь класс. В аттаче пример, и статья в формате pdf Это сообщение отредактировал(а) Rohoss - 22.4.2009, 23:19 Присоединённый файл ( Кол-во скачиваний: 12 ) ![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |