Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы C#.doc
Скачиваний:
58
Добавлен:
10.02.2015
Размер:
430.59 Кб
Скачать

Основы c#. Урок 27. Строки (класс StringBuilder)

На этом уроке мы рассмотрим другой класс для работы со строками - класс StringBuilder. Он принадлежит пространству имен System.Text

Этот класс работет быстрее, чем класс String, так как при изменении строки, созданной как экземпляр класса String, у нас создается каждый раз новый экземпляр класса, а старый уничтожается, при использовании же класса StringBuilder расходов на создание-уничтожение экземпляра класса нет - мы работаем всегда с одним экземпляром.

Обратите внимание, что для этого класса мы не можем использовать простое присваивание:

StringBuilder s="abc"; //Неправильно!

В этом случае мы долны действовать так:

StringBuilder s=new StringBuilder("abc"); //Правильно

У класса StringBuilder нет статических методов. Все его методы - динамические. Ниже перечислены основные свойства и методы класса StringBuilder:

Свойство Length. Возвращает длину строки. Пример использования:

intk=s.Length;

Свойство только для чтения MaxCapacity. Дает максимальное количество символов, которые можно записать в объект типа StringBuilder. Пример использования:

System.Console.WriteLine(s.MaxCapacity);

Метод Append. Прибавляет строку к существующей. Пример использования:

StringBuilder s1=new StringBuilder("Cogito ");

StringBuilder s2=new StringBuilder("ergo ");

s1.Append(s2);

s1.Append("sum");

System.Console.WriteLine(s1); //Напечатается "Cogito ergo sum"

Метод Equals. Служит для сравнения двух строк. Возвращает true или false. Пример использования:

if(s1.Equals(s2))

System.Console.WriteLine("Строки равны");

else

System.Console.WriteLine("Строки не равны");

Метод Insert. Вставляет символы в заданную позицию (Нумерация идет с нуля). Пример использования:

StringBuilder s1=new StringBuilder("abcde");

s1.Insert(2, "xyz");

System.Console.WriteLine(s1); //Напечатается "abxyzcde"

Метод Remove. Удаляет символы из строки. Пример использования:

StringBuilder s1=new StringBuilder("abcde");

s1.Remove(1, 2);

System.Console.WriteLine(s1); //Напечатается "ade"

Певый параметр у Remove - это с какой позиции удаляем (нумерация с нуля), второй - сколько символов удаляем.

Метод Replace. Заменяет символы. Пример использования:

StringBuilder s=new StringBuilder("abcdeabcde");

s.Replace("abc", "ZZZ");

System.Console.WriteLine(s); //Напечатается "ZZZdeZZZde"

Основы c#. Урок 28. Передача параметров по ссылке и по значению (ref и out)

Если мы передаем в некоторую функцию параметр, то функция по умолчанию работает с копией параметра, а не с оригиналом. Это называется перередача по значению. При этом при изменении передаваемого параметра внутри функции значение соответствующей переменной вне функции не изменится. Иногда же нам надо, что бы функция действительно изменяла передаваемые в нее параметры. Для этого мы должны передавать их по ссылке. Для этого мы используем ключевое слово ref. Вот пример:

classTest

{

static void SomeFunction1(int a)

{

a=12; //Изменяем копию параметра функции

}

static void SomeFunction2(ref int a)

{

a=55; //Изменяем оригинал параметра функции

}

public static void Main()

{

int z=23;

SomeFunction1(z);

Console.WriteLine(z); //Напечатается 23

SomeFunction2(ref z);

Console.WriteLine(z); //Напечатается 55

}

}

Обратите внимание, что при вызове функции SomeFunction2 мы опять используем ключевое слово ref (как и при объявлении этой функции):

...

SomeFunction2(ref z);

...

Параметр out аналогичен параметру ref, только при его использовании в функцию можно передавать неинициализированные переменные (т. е. переменные с незаданными начальными значениями). Вот пример:

classTest

{

static void SomeFunction2(ref int a)

{

a=55;

}

static void SomeFunction3(out int a)

{

a=66;

}

public static void Main()

{

intz=0;//Переменную z надо обязательно инициализировать

SomeFunction2(ref z);

Console.WriteLine(z); //Напечатается 55

inty;//Переменную y можно не инициализировать

SomeFunction3(out y);

Console.WriteLine(y); //Напечатается 66

}

}

При вызове такой функции обязательно использование ключевого слова out.