Опубликован: 22.11.2005 | Уровень: специалист | Доступ: платный | ВУЗ: Тверской государственный университет
Лекция 13:

Символы и строки постоянной длины в C#

< Лекция 12 || Лекция 13: 1234 || Лекция 14 >

Класс 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. Как отмечалось в лекции 3, существуют неявные преобразования типа char в целочисленные типы, начиная с типа ushort. Обратные преобразования целочисленных типов в тип char также существуют, но они уже явные.

В результате работы процедуры TestChar строка s, полученная сцеплением трех символов, преобразованных в строки, имеет значение BSX, переменная ch равна A, а ее код - переменная code - 65.

Не раз отмечалось, что семантика присваивания справедлива при вызове методов и замене формальных аргументов на фактические. Приведу две процедуры, выполняющие взаимно-обратные операции - получение по коду символа и получение символа по его коду:

public int SayCode(char sym)
{
	return (sym);		
}//SayCode

public char SaySym(object code)
{
	return ((char)((int)code));
}// SaySym

Как видите, в первой процедуре преобразование к целому типу выполняется неявно. Во второй - преобразование явное. Ради универсальности она слегка усложнена. Формальный параметр имеет тип Object, что позволяет передавать ей в качестве аргумента код, заданный любым целочисленным типом. Платой за это является необходимость выполнять два явных преобразования.

Таблица 13.1. Статические методы и свойства класса Char
Метод Описание
GetNumericValue Возвращает численное значение символа, если он является цифрой, и ( -1 ) в противном случае
GetUnicodeCategory Все символы разделены на категории. Метод возвращает Unicode категорию символа. Ниже приведен пример
IsControl Возвращает true, если символ является управляющим
IsDigit Возвращает true, если символ является десятичной цифрой
IsLetter Возвращает true, если символ является буквой
IsLetterOrDigit Возвращает true, если символ является буквой или цифрой
IsLower Возвращает true, если символ задан в нижнем регистре
IsNumber Возвращает true, если символ является числом (десятичной или шестнадцатиричной цифрой)
IsPunctuation Возвращает true, если символ является знаком препинания
IsSeparator Возвращает true, если символ является разделителем
IsSurrogate Некоторые символы Unicode с кодом в интервале [0x10000, 0x10FFF] представляются двумя 16-битными "суррогатными" символами. Метод возвращает true, если символ является суррогатным
IsUpper Возвращает true, если символ задан в верхнем регистре
IsWhiteSpace Возвращает true, если символ является "белым пробелом". К белым пробелам, помимо пробела, относятся и другие символы, например, символ конца строки и символ перевода каретки
Parse Преобразует строку в символ. Естественно, строка должна состоять из одного символа, иначе возникнет ошибка
ToLower Приводит символ к нижнему регистру
ToUpper Приводит символ к верхнему регистру
MaxValue, MinValue Свойства, возвращающие символы с максимальным и минимальным кодом. Возвращаемые символы не имеют видимого образа
< Лекция 12 || Лекция 13: 1234 || Лекция 14 >
Александр Галабудник
Александр Галабудник

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

Александра Гусева
Александра Гусева
Сергей Кузнецов
Сергей Кузнецов
Россия, Москва
Pavel Kuchugov
Pavel Kuchugov
Россия, Московский инженерно-физический институт, 2010