Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Клас char
В C# є символьний клас Char, заснований на класі System.Char і що використає двобайтне кодування Unicode подання символів. Для цього типу в мові визначені символьні константи - символьні літерали. Константу можна задавати: · символом, укладеним в одинарні лапки; · escape-послідовністю, що задає код символу; · Unicode-послідовністю, що задає Unicode-код символу. От кілька прикладів оголошення символьних змінних і роботи з ними: public void TestChar(){ char ch1='A', ch2 ='\x5A', ch3='\u0058'; char ch = new Char(); int code; string s; ch = ch1; //перетворення символьного типу в тип int code = ch; ch1=(char) (code +1); //перетворення символьного типу в рядок //s = ch; s = ch1.ToString()+ch2.ToString()+ch3.ToString(); Console.WriteLine(" s= {0}, ch= {1}, code = {2}", s, ch, code); }//TestCharТри символьні змінні ініціалізовані константи, значення яких задані трьома різними способами. Змінна ch оголошується в об'єктному стилі, використовуючи new і виклик конструктора класу. Тип char, як і всі типи C#, є класом. Цей клас успадковує властивості й методи класу Object і має велику кількість власних методів. Чи існують перетворення між класом char й іншими класами? Явні або неявні перетворення між класами char й string відсутні, але, завдяки методу ToString, змінні типу char стандартним чином перетворяться в тип string. Існують неявні перетворення типу char у цілочисельні типи, починаючи з типу ushort. Зворотні перетворення цілочисельних типів у тип char також існують, але вони вже явні. В результаті роботи процедури TestChar рядок s, отримана злиттям трьох символів, перетворених у рядки, має значення BZX, змінна ch дорівнює A, а її код - змінна code - 65. Не раз відзначалося, що семантика присвоювання справедлива при виклику методів і заміні формальних аргументів на фактичні. Приведемо дві процедури, що виконують взаємо-зворотні операції - одержання за кодом символу й одержання символу за його кодом: public int SayCode(char sym){ return (sym); }//SayCode public char SaySym(object code){ return ((char)((int)code)); }// SaySymЯк бачите, у першій процедурі перетворення до цілого типу виконується неявно. У другий - перетворення явне. Заради універсальності вона злегка ускладнена. Формальний параметр має тип Object, що дозволяє передавати їй як аргумент код, заданий будь-яким цілочисельним типом. Платою за це є необхідність виконувати два явних перетворення. Таблиця 15.1. Статичні методи й властивості класу Char
Клас Char, як і всі класи в C#, успадковує властивості й методи батьківського класу Object. Але в нього є й власні методи й властивості, і їх чимало. Зведення цих методів наведені в таблиці 1. Більшість статичних методів перевантажені. Вони можуть застосовуватися як до окремого символу, так і до рядка, для якого вказується номер символу для застосування методу. Основну групу становлять методи Is, украй корисні при розборі рядка. Приведемо приклади, у яких використаються багато хто з перерахованих методів: public void TestCharMethods(){ Console.WriteLine(" Статичні методи класу char: "); char ch='a', ch1='1', lim ='; ', chc='\x'; double d1, d2; d1=char.GetNumericValue(ch); d2=char.GetNumericValue(ch1); Console.WriteLine(" Метод GetNumericValue: "); Console.WriteLine(" sym 'a' - value {0}", d1); Console.WriteLine(" sym '1' - value {0}", d2); System.Globalization.UnicodeCategory cat1, cat2; cat1 =char.GetUnicodeCategory(ch1); cat2 =char.GetUnicodeCategory(lim); Console.WriteLine(" Метод GetUnicodeCategory: "); Console.WriteLine(" sym '1' - category {0}", cat1); Console.WriteLine(" sym '; ' - category {0}", cat2); Console.WriteLine(" Метод IsControl: "); Console.WriteLine(" sym '\x' - IsControl - {0}", char.IsControl(chc)); Console.WriteLine(" sym '; ' - IsControl - {0}", char.IsControl(lim)); Console.WriteLine(" Метод IsSeparator: "); Console.WriteLine(" sym ' ' - IsSeparator - {0}", char.IsSeparator(' ')); Console.WriteLine(" sym '; ' - IsSeparator - {0}", char.IsSeparator(lim)); Console.WriteLine(" Метод IsSurrogate: "); Console.WriteLine(" sym '\u10FF' - IsSurrogate - {0}", char.IsSurrogate('\u10FF')); Console.WriteLine(" sym '\\' - IsSurrogate - {0}", char.IsSurrogate('\\')); string str = " \U00010F00"; //Символи Unicode в інтервалі [0x10000, 0x10FFF] //представляються двома 16-бітними сурогатними символами Console.WriteLine(" str = {0}, str[0] = {1}", str, str[0]); Console.WriteLine(" str[0] IsSurrogate - {0}", char.IsSurrogate(str, 0)); Console.WriteLine(" Метод IsWhiteSpace: "); str =" пробіли, пробіли! " + " \x" + " \x" + " Усюди пробіли! "; Console.WriteLine(" sym '\x ' - IsWhiteSpace - {0}", char.IsWhiteSpace('\x')); Console.WriteLine(" str: {0}", str); Console.WriteLine(" й її пробіли - символ 8 {0}, символ 17 {1}", char.IsWhiteSpace(str, 8), char.IsWhiteSpace(str, 17)); Console.WriteLine(" Метод Parse: "); str=" A"; ch = char.Parse(str); Console.WriteLine(" str: {0} char: {1}", str, ch); Console.WriteLine(" Мінімальне й максимальне значення: {0}, {1}", char.MinValue.ToString(), char.MaxValue.ToString()); Console.WriteLine(" Їхні коди: {0}, {1}", SayCode(char.MinValue), SayCode(char.MaxValue)); }//TestCharMethodsРезультати консольного виводу, породженого виконанням методу, зображені на мал. 15.1. Рис. 15.1 Виклики статичних методів класу char Крім статичних методів, у класу Char є й динамічні. Більшість із них - це методи батьківського класу Object, успадковані й перепевні в класі Char. Із власних динамічних методів варто відзначити метод CompareTo, що дозволяє проводити порівняння символів. Він відрізняється від методу Equal тим, що для незбіжних символів видає " відстань" між символами відповідно до їх упорядкованості в кодуванні Unicode. Приведу приклад: public void testCompareChars(){ char ch1, ch2; int dif; Console.WriteLine(" Метод CompareTo"); ch1='A'; ch2= 'Z'; dif = ch1.CompareTo(ch2); Console.WriteLine(" Відстань між символами {0}, {1} = {2}", ch1, ch2, dif); ch1='а'; ch2= 'А'; dif = ch1.CompareTo(ch2); Console.WriteLine(" Відстань між символами {0}, {1} = {2}", ch1, ch2, dif); ch1='Я'; ch2= 'А'; dif = ch1.CompareTo(ch2); Console.WriteLine(" Відстань між символами {0}, {1} = {2}", ch1, ch2, dif); ch1='A'; ch2= 'A'; dif = ch1.CompareTo(ch2); Console.WriteLine(" Відстань між символами {0}, {1} = {2}", ch1, ch2, dif); ch1='А'; ch2= 'A'; dif = ch1.CompareTo(ch2); Console.WriteLine(" Відстань між символами {0}, {1} = {2}", ch1, ch2, dif); ch1='Е'; ch2= 'А'; dif = ch1.CompareTo(ch2); Console.WriteLine(" Відстань між символами {0}, {1} = {2}", ch1, ch2, dif); }//TestCompareCharsРезультати порівняння зображені на мал. 2. Рис. 15.2. Порівняння символів
|