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

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

Основы c#. Урок 23. Статические конструкторы

Статическими к классе могут быть и конструкторы. Если обычный конструктор вызывается в момент создания экземпляра класса, то статический - в самом начале, т. е. перед созданием первого экземпляря класса.

В статическом конструкторе можно задать начальные значения для статических переменных класса. Вот пример:

classMyClass

{

public static int data;

//Статический конструктор

static MyClass()

{

data=10;

}

//Конструктор

public MyClass()

{

data++;

}

}

class Test

{

public static void Main()

{

MyClass a=new MyClass();

MyClass b=new MyClass();

System.Console.WriteLine(MyClass.data);

}

}

Указанный фрагмент выведет на экран 12. Действительно, сначала вызовется статический конструктор, который присвоит значение 10 перемнной data. Затем для каждого созданного экземпляра класса MyClass вызовется обычный конструктор, к котором переменная data увеличится каждый раз на 1.

Обратите внимание, что оба конструктора без параметра. Противоречия тут нет, так как один из них - статический, а другой - нет.

Основы c#. Урок 24. Закрытые конструкторы или классы без экземпляров

В C# нет глобальных переменных, функций или констант. Все они обязательно должны принадлежать некоторому классу. И если у вас имеется класс, содержащий в себе, например, некоторые нужные вам константы, то экземпляры такого класса вам не нужны (так как вы создали этот класс исключительно как хранилище). Чтобы запретить создание экземпляров класса, вы объявляете конструктор в нем как закрытый (то есть с модификатором private или вовсе без модификатора - так как отсутствие модификатора и подразумевает private). Это означает, что создать экземпляр такого класса не удастся (что нам и надо).

Вот пример такого класса:

namespacetest

{

//Класс без экземпляра

class MyClass

{

//Закрытый конструктор

privateMyClass()

{

}

public static int MyPhoneNumber=1239999;

}

class Test

{

public static void Main()

{

System.Console.WriteLine(MyClass.MyPhoneNumber);

}

}

}

Тут у нас класс MyClass имеет закрытый конструктор, так что создавать его экземпляры мы не можем. Так, следующий код будет ошибочным:

class Test

{

public static void Main()

{

MyClass a=new MyClass(); //ошибка!!!

}

}

Использовать же статические переменные и константы такого класса мы можем (так, мы выводим на экран константу MyPhoneNumber).

Разумеется, в таком классе может содержать и методы:

classMyClass

{

//Закрытый конструктор

privateMyClass()

{

}

public static int MyPhoneNumber=1239999;

public static int SomeNumber=1;

public static int GetSomeNumber(){

SomeNumber++;

return SomeNumber;

}

}

class Test

{

public static void Main()

{

System.Console.WriteLine(MyClass.GetSomeNumber()); //Выведется 2

System.Console.WriteLine(MyClass.GetSomeNumber()); //Выведется 3

}

}

Указанный фрагмент выведет 2 и 3.

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

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

Вот конкретный пример реализации такой функции:

usingSystem;

classMyClass{

public static int Sum(params int[] args)

{

int res=0;

for(int i=0; i<args.GetLength(0); i++){

res+=args[i];

}

return res;

}

}

namespacetest

{

class Test

{

public static void Main()

{

System.Console.WriteLine(MyClass.Sum(1, 3));

System.Console.WriteLine(MyClass.Sum(12));

System.Console.WriteLine(MyClass.Sum(-1, 9, 2));

}

}

}

Здесь в классе MyClass мы объявляем статческую фунцкию Sum, в которую мы можем передавать переменное число параметров. Для этого в круглых скобках после имени функции мы пишем конструкцию

...

public static int Sum(params int[] args)

...

Синтаксис у нее такой - сначала пишем ключевое слово params, затем - тип параметров (int в данном случае), после которого ставим пустые квадратные скобки и в конце этой конструкции пишем произвольное имя параметра (в нашем примере он назван args).

В классе test мы испытываем наш класс MyClass, а именно, вызываем функцию Sum с разным числом параметров. Все работает как надо и наша программа покажет на экране 4, 12 и 10.

Основы c#. Урок 26. Строки (класс System.String)

Строки в C# - это экземпляры класса System.String. Вообще говоря в C# есть тип string, но класс System.String яляется более продвинутым, так что его использование часто оказывается более оправданным и простым. Этот класс имеет множество методов и свойств, некоторые из которых перечислены ниже:

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

String s="qqq";

intk=s.Length;//В k запишется 3

Compare. Статический метод, сравнивающий две строки. Возвращает 0, есть строки равны, отрицательное значение, если первая строка меньше второй и положительное значение, если первая строки больше второй (больше и меньше в алфавитном смысле, разумеется). Пример использования:

namespacetest

{

class Test

{

public static void Main()

{

String s1="arbour", s2="ace", s3="azote";

System.Console.WriteLine(String.Compare(s1, s1)); //Выдаст 0, т. к. "arbour" равно "arbour".

System.Console.WriteLine(String.Compare(s1, s2)); //Выдаст -1, т. к. "arbour" меньше "ace".

System.Console.WriteLine(String.Compare(s1, s3)); //Выдаст 1, т. к. "arbour" больше "azote".

}

}

}

Equals. Метод, возвращает true, если строки равны, false - если не равны. Может быть как статическим, так и не статическим. Пример использования:

String s1="qqq", s2="www";

System.Console.WriteLine(String.Equals(s1, s2).ToString());

//Статический метод

System.Console.WriteLine(System.Console.WriteLine(String.Equals(s1, s2).ToString());

//Не статический метод

System.Console.WriteLine(s1.Equals(s2).ToString());.ToString());

Метод Substring. Поволяет извлечь из строки подстроку. Пример использования:

String s1="abcdefg", s2;

s2=s1.Substring(3, 2);

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

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

Метод Insert. Вставляет в строку другую строку. Пример использования:

String s1="abcdefg", s2;

s2=s1.Insert(1, "xyz");

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

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

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

String s1="abcabcab", s2="bc", s3="zzz";

System.Console.WriteLine(s1.IndexOf(s2)); //Напечатается 1

System.Console.WriteLine(s1.IndexOf(s3)); //Напечатается -1

Этот метод возвращает номер позиции, на котором в строке находится передаваемая в качестве параметра подстрока. Если такой построки нет, то возвращается -1.

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

String s1="abcabcab", s2="bc", s3;

s3=s1.Replace(s2, "q");

System.Console.WriteLine(s3); //Напечатается aqaqab

Методы EndWith и StartsWith. Проверяют, не завершается ли или не начинается ли строка с или на заданную строку соответственно. Пример использования:

String s1="arbour";

if(s1.StartsWith("ar"))

System.Console.WriteLine("Строка начинается на\"ar\"");

else

System.Console.WriteLine("Строка не начинается на\"ar\"");

Методы ToUpperиToLowerпереводят строку в верхний или нижний регистр соответственно. Пример использования:

String s1="aRbRur";

s1=s1.ToLower();

Методы Trim, TrimEnds и TrimStart. Удаляют пробельные символы из начала и конца строки (Trim), только с конца строки (TrimEnds) и только с начала строки (TrimStart). Пример использваония:

String s1=" ar brur ";

System.Console.Write(s1.Trim());

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

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