Дослідження строкового в Visual C # (Sharp)

Рядок є обєктом і, тому, посилальним типом Строковий тип string

має методи і властивості Звичайні типи, такі як double і int, також мають

методи і властивості, але строковий тип є першим дійсним обєктом, який нам потрібно розглянути

Тип можна вивчити, читаючи відповідну документацію або скориставшись можливістю IntelliSense середовища розробки Читання документації має свої переваги, але це найбільш повільний і найбільш тяжкий спосіб Більш зручним є використання IntelliSense, коли методи і властивості определеятся типу виводяться на екран у що легко піддається розумінню форматі

При першому використанні IntelliSense може здатися, що замість допомоги він просто лізе під руку в самий невідповідний час, але з часом його допомогу важко буде переоцінити Процедура застосування IntelliSense проілюстрована на рис 32 Я б порекомендував вам витратити кілька хвилин на експерімеірованіе з використанням цієї можливості Я також рекомендую постійно тримати IntelliSense включеним в Visual С # Express

Рис 32 Демонстрація використання IntelliSense на прикладі зі строкової змінної

IntelliSense працює тільки з перемінними певного типу Принцип його роти заснований на синтаксичному аналізі коду середовищем розробки і читанні мета-

даних, асоційованих з даним типом Метадані– Це дані, які описують вихідний код Всякий раз при визначенні класу з ним асоціюються методи і властивості Описи методів і властивостей і є елементами метаданих, що виводяться IntelliSense Обставина, що всі типи мають метадані, яяется одним з достоїнств NET

КОЛИ ІНФОРМАЦІЇ ВІД INTELLISENSE НЕДОСТАТНЬО

IntelliSense є хорошим гідом і навіть показує пояснення про те, що даий метод робить (див рис 32) Але іноді цих пояснень недостатньо в такому випадку требующуюся інформацію можна знайти в документації Microsoft, до якої можна отримати доступ, вибравши послідовність команд меню Help | Index Іормацію про конкретний тип можна знайти, ввівши його імя в поле Look for Наприклад, якщо ввести в це поле текст String class, то буде виведена докладна інформація про клас string, яку потім можна буде відфільтрувати в поле Filtered by

Документація Microsoft в Visual С # Express є частиною бібліотеки Microsoft Devel-oper Network (MSDN) (http://msdnmicrosoftcom) Web-сторінка MSDN містить докентацію, яка допоможе вам розібратися з інтерфейсом API стандартного набору SDK NET Існує буквально тисячі типів і неймовірна кількість їхніх методів і властивостей Хоча ви навряд чи використовуєте навіть малу дещицю цих класів та їх методів і властивостей в одному додатку, ви завжди будете використовувати набір SDK NET

У більшості випадків MSDN буде достатньо, щоб отримати необхідну іормацію про тип Але якщо вам захочеться дізнатися побільше про концепції, то можете пошукати необхідну інформацію в Інтернеті Одним з таких додаткових Істочному інформації може бути Web-сторінка Code Project (http://wwwcodeprojectcom) Дана Web-сторінка містить безліч прикладів на практично будь-яку тему розробки, яка може прийти вам в голову

Основа всіх типів: обєкт

За замовчуванням, всі елементи в NET є обєктами, що мають кілька оовних властивостей і методів З кожним обєктом асоціюються чотири базових методу:

• Equals () – засвідчує рівність двох обєктів (рис 33)

• GetHashCode () – отримує унікальне число, яке описує обєкт (рис 34)

Обєкти, що мають однаковий вміст, повертають однаковий хеш-код

• GetType () – отримує метадані, асоційовані з обєктом (рис 35)

Дозволяє програмі динамічно визначити методи і властивості обєкта Цей метод застосовується в IntelliSense для виведення на екран списку

• Tostring () – перетворює вміст змінної типу в рядок (рис 36)

Зверніть увагу, що стандартна реалізація методу Tostring () в середовищі CLR застосовна тільки з звичайними типами

Дані чотирьох базових методів можна викликати для будь оголошеної Перені Ми будемо застосовувати метод Tostring () при налагодженні і дослідженні стоянь екземплярів обєктів під час виконання програми Метод Tostring () повертає рядок в читається форматі, що містить стан екземпляра обєкта

Рис 33 Метод Equals () застосовується для перевірки двох обєктів на рівність

Рис 34 Метод GetHashCode () отримує унікальне число, яке описує обєкт

Рис 35 Метод GetType () отримує метадані, асоційовані з обєктом

Рис 36 Метод Tostrin g () перетворює числове вміст змінної в рядок

Програмісти можуть зрідка вдаватися до використання методу GetTypeO, але середовище розробки та інші інструменти застосовують цей метод постійно З пощью методу GetType () можна дізнатися можливості змінної під час іспоенія програми У технічних термінах метод GetTypeO повертає формалей опис на основі метаданих цього типу

При читанні опису методів Equals) І GetHashCode) У вас може скластися враження, що ці дві функції мають однакове призначення Але це не так

Припустимо, що ви переїжджаєте і упакували кухонне начиння в два ящики У каом з цих ящиків знаходяться однакові предмети: пять червоних тарілок, дві срібні виделки, два ножі з мідними рукоятками і два келиха для вина Порівнявши ящики, методи Equals () і GetHashCode) Повернуть позитивний результат, що означає, що обидва ящика містять однакову кількість однакових предм Важливо розуміти, що навіть хоча кожен з цих двох ящиків є унальним примірників свого класу, що містить унікальні предмети, їх сержімое однаково При порівнянні екземплярів обєктів за допомогою методу Equals () або GetHashCode () Ми порівнюємо атрибути метаданих і значень, а не унікальні екземпляри

Тепер уявіть, що винні келихи в одному ящику кришталеві від відомого виробника, а в іншому – скляні підробки типу Made in China. Порівнявши ящики за допомогою методу Equals (), ми отримаємо негативний результат, т к властивості вмісту ящиків відрізняються Різниця полягає в наших фужерах для вина А ось метод GetHashCode () буде продовжувати вказувати, що вміст ящиків ідентично Причиною цьому є та обставина, що метод GetHashCode () виконує ідентифікацію вмісту по-швидкому

Різниця між методами Equals) І GetHashCode () полягає в точці зору З точки зору перевізника, ящики однакові, т к йому байдуже, якого про-

изводства фужери, але вам – ні, т к за кришталь ви переживаєте більше, ніж за скло

Те що метод GetHashCode () може повернути ідентичні значення для обєктів з, здавалося б, різним вмістом, може призводити розробників в замешельство Одним із способів уникнути такого замішання може бути рамотреніе призначення методу GetHashCode () не як посвідчення ідентичності двох обєктів, а як посвідчення їх відмінності Якщо обєкти повертають різні хеш-коди, то ми знаємо, що їх вміст не однакова Метою отримання хеода є швидка ідентифікація вмісту обєкта Це не стовідсотково надійний спосіб, але в більшості випадків він працює

Проблема: посимвольне порівняння в Visual C # (Sharp)

Повернемося до проблеми пробільних символів Джерелом цієї проблеми явлтся метод CompareTo () Інформацію про цей метод можна знайти в документі MSDN, прокрутивши сторінку довідки для класу string до частини, містить елемент CompareTo, і клацнувши по цьому елементу У результаті буде виведена сторінка, що містить наступний опис:

Compares  this  instance  with  a  specified object.

Це не говорить нам про багато, тому спробуємо знайти потрібну нам інформацію в поясненні спорідненого методу Подібні методи часто посилаються один на одного і пояснюють загальні принципи Поверніться назад на сторінку довідки для класу string і клацніть по посиланню Compare), а в відкрилася сторінці клацніть за посиланням Compare (string, string) Прокрутіть сторінку до розділу Remarks, І в поясненні методу Compare () буде міститися наступний текст:

“Процес порівнювання припиняється при виявленні різниці між рядками або по закінченні порівняння двох рядків Але якщо процес порівняння доходить до кінця одного рядка, в той час як в іншому рядку залишаються символи, тоді рядок з рештою символами вважається більшою Значення, що повертається є результатом останньої виконаної операції порівняння .

ПРИМІТКА

Хоча з попереднього опису може здатися, що перегляд призначення методу є досить тривалим процесом, насправді це не так Набравши трохи досвіду, ви будете робити це автоматично, навіть не помічаючи цих нколькіх клацань мишею

Виконання методу CompareTo () завершилося невдачею тому, що він порівнює рядки посимвольно (рис 37)

1 Порівнює даний екземпляр з вказаним обєктом – Пер

Рис 37 Посимвольне порівняння рядків методом CompareTo ()

Рядки зберігаються в буферах, по одному символу в одній комірці буфера Один прельний символ займає одну клітинку буфера Як буде показано в наступному розділі, цією обставиною іноді можна скористатися, але в даному випадку воно викликає помилку порівняння рядків

Зясувавши, в чому полягає проблема, ми можемо приступити до пошуку її вирішення

Джерело: Гросс К С # 2008: Пер з англ – СПб: БХВ-Петербург, 2009 – 576 е: ил – (Самовчитель)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*