Материал: Основы C#

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Основы 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.

Основы c#. Урок 29. Пример передачи по ссылке

На этом уроке мы напишем функцию для решения квадратного уравнения. Эта функция будет передавать корни уравнения через ссылку - т. е. через свои два параметра. Всего же параметров будет пять - остальные три - это коэффициетны a, b, и c. Тип у функции будет int - она будет возвращать фактическое число корней (т. е. 0, 1 или 2).

Вот текст:

usingSystem;

namespacetest

{

class Test

{

static int GetSolution(out double x1, out double x2, double a, double b, double c)

{

double d=b*b-4*a*c; //Дискриминант

x1=x2=0;

//Два разных корня

if(d>0)

{

x1=(-b+Math.Sqrt(d))/(2*a);

x2=(-b-Math.Sqrt(d))/(2*a);

return2;

}

//Два совпадающих корня

if(d==0)

{

x1=-b/(2*a);

x2=-b/(2*a);

return 1;

}

//Корней нет

return 0;

}

public static void Main()

{

double x1, x2;

int n = GetSolution(out x1, out x2, 1, -5, 6);

switch(n)

{

case 1:

Console.WriteLine("Два совпадающих корня x1={0}, x2={1}", x1, x2);

break;

case 2:

Console.WriteLine("Два разных корня x1={0}, x2={1}", x1, x2);

break;

case 0:

Console.WriteLine("Корней нет");

break;

}

}

}

}

Запускаем программу. Программа должна выдать на экран "Два разных корня x1=3, x2=2".

Основы c#. Урок 30. Перегрузка

При перегрузке мы имеем в одной области видимости два или более одноименных метода. Для того, чтобы при компиляции не было ошибок, эти методы должны различаться или типом параметров, или их количеством (или и тем и другим).

Вот пример:

usingSystem;

namespacetest

{

class SomeClass{

//Первый метод SomeFunc.

public static int SomeFunc()

{

return 0;

}

//Второй метод SomeFunc.

public static int SomeFunc(int k)

{

return k*k;

}

//Третий метод SomeFunc.

public static float SomeFunc(float k)

{

return k;

}

}

class Test

{

static void Main(string[] args)

{

Console.WriteLine(SomeClass.SomeFunc());

Console.WriteLine(SomeClass.SomeFunc(10));

Console.WriteLine(SomeClass.SomeFunc((float)10));

}

}

}

Результатом выполнения прораммы будет 0 100 10.

Тут в классе SomeClass мы имеет три метода с одним названием - SomeFunc. Для простоты мы сделали все методы статическими, но это не важно. Наши методы различаются количеством параметров и типом. В тестовом классе Test мы вызываем эти методы. Обратите внимание на подсказку редактора - при написании метода SomeFunc возникает желтенькое окошко в котором написано "1 of 3" (т. е. первый метод из трех):

Если нажимать стрелочки вверх-вниз на клавиатуре, то появятся подсказки и по другим двум методам.

Обратите внимание на два момента. Во-первых, методы не могут различаться только типом возвращаемого значения - они должны различаться именно по параметрам. Например, такой метод добавить в класс SomeClass нельзя:

public static bool SomeFunc()

{

returntrue;

}

Во-вторых, в вызове третьего метода мы использовали приведение типов:

...

Console.WriteLine(SomeClass.SomeFunc((float)10));

...

Если бы мы вызвали метод без слова float, то вызвался бы перегруженный вариант для целых чисел.

Основы c#. Урок 31. Функции класса System.Array

Массивы в C# основаны на классе System.Array. У этог класса, как и у любого другого, есть разные полезные методы.

Вот пример:

usingSystem;

namespacetest

{

class Test

{

static void Main(string[] args)

{

//Объявление массива.

int[] num = {4, -5, 2, 0, 23};

//Выводим массив.

foreach (int i in num)

{

Console.WriteLine(i.ToString());

}

//Переворачиваем массив.

Console.WriteLine("Перевернутый массив");

Array.Reverse(num);

foreach (int i in num)

{

Console.WriteLine(i.ToString());

}

//Сортируем массив.

Array.Sort(num);

Console.WriteLine("Отсортированный массив");

foreach (int i in num)

{

Console.WriteLine(i.ToString());

}

//Обнуляем массив.

Array.Clear(num, 0, 5);

Console.WriteLine("Обнуленный массив");

foreach (int i in num)

{

Console.WriteLine(i.ToString());

}

}

}

}

Тут мы используем статические методы класса Array для сортировки, переворачивания и очистки массива. Разумеется, эти методы не единственные.

В классе Array есть, например, еще встроенный статический метод IndexOf предназначенный для поиска элемента в массиве. Вот пример его использования:

...

intk=-5;

Console.WriteLine("Число {0} находится на {1} месте.", k, Array.IndexOf(num, k));

...

Этот метод возвращает индекс искомого элемента (нумерация с нуля). Если такого элемента нет, то возвращается -1.

Обратите внимание, что эти методы действуют для встроенных типов (в нашем примере массив был типа int). Для пользовательских типов данных их применение тоже возможно, но для этого на приложить некоторые дополнительные усилия.

Как видите, с массивами в C# можно автоматически делать много чего полезного. В Visual C++, например, такого удобства не было.

Основы c#. Урок 33. События

На этом занятии мы с вами рассмотрим создание событий в C#. С помощью событий класс извещает, что в нем что-то произошло. События часто создаются в классах используемых для создания пользовательского интерфейса - например у кнопки есть событие, наступающее при щелчке на этой кнопке. События также могут присутствовать и в классах, не предназначенных для создания пользовательского интерфейча - например, они могут быть в классах консолького приложения. Именно для такого класса мы и рассмотрим создание события.

Источник: https://files.student-it.ru/previewfile/282029