- •1).Net Framework: общая характеристика, основные компоненты.
- •2).Net Framework: виртуальная машина и управляемый код
- •3) Алфавит языка c#. Лексемы: идентификаторы, ключевые слова, неименованные компоненты.
- •4) Типы данных языка с#: концепция, основные типы.
- •5) Переменные: правила описания, инициализация.
- •Область видимости переменных
- •6) Операции языка c#. Правила вычисления выражений.
- •1) Операция присваивания
- •2) Арифметические операции
- •3) Поразрядные операции
- •4) Операции отношения:
- •5) Логические операции:
- •6) Операция «приведение к типу»:
- •7) Строковые преобразования. Класс Convert:
- •8) Понятие исключения:
- •7) Операторы языка c#. Составной оператор. Блок. Метки
- •1) Оператор присваивания:
- •2) Вызов метода:
- •3) Блок или составной оператор:
- •4) Операторы ветвления:
- •5) Операторы цикла:
- •5.1. Оператор for:
- •5.2. Оператор while:
- •5.3. Оператор foreach:
- •6) Операторы перехода:зззззззззззззз
- •6.1. Оператор goto:
- •6.2. Операторы break и continue:
- •6.3. Оператор return:
- •9) Операторы цикла.
- •5.1. Оператор for:
- •5.2. Оператор while:
- •5.3. Оператор foreach:
- •10) Операторы передачи управления.
- •11) Логические и поразрядные операции языка с#.
- •12) Классы. Основные понятия, спецификаторы доступа.
- •13) Создание объектов. Понятие ссылки.
- •14) Массивы: одномерные, многомерные, невыровненые, массивы объектов.
- •Инициализация
- •Инициализация в цикле программы
- •Класс System.Array
- •15) Строковый тип данных string.
- •16) Методы: назначение, определение, вызов.
- •17) Возврат методом значений. Тип void.
- •18) Рекурсивные методы.
- •19) Перегрузка методов.
- •20) Конструкторы. Назначение, определение, вызов.
- •Вызов конструктора из других конструкторов
- •Конструкторы производных классов
- •21) Деструкторы. Назначение, определение, вызов.
- •Деструкторы Dispose() и Close()
- •22) Способы передачи параметров методу.
- •23) Статические компоненты классов.
- •24) Ссылка this.
- •25) Копирование объектов.
15) Строковый тип данных string.
Тип данных string — это последовательность, содержащая ни одного или любое число знаков Юникода. В платформе.NET Framework string является псевдонимом для String.
Несмотря на то, что тип string является ссылочным типом, операторы равенства (== и !=) определены для сравнения значений объектов типа string, а не ссылок. Это упрощает проверку равенства строк. Пример.
string a = "hello";
string b = "h";
// Append to contents of 'b'
b += "ello";
Console.WriteLine(a == b);
Console.WriteLine((object)a == (object)b);
В
этом примере отображается "True", а
затем "False", поскольку содержимое
строк одинаково, но a
и b
не
ссылаются на один и тот же экземпляр
строки.
Оператор + служит для объединения строк.
string a = "good " + "morning";
В данном примере создается строковый объект, содержащий текст "good morning".
Строки являются неизменяемыми: содержимое строкового объекта невозможно изменить после создания объекта, хотя из-за синтаксиса изменения кажутся возможными. Например, при написании этого кода компилятор на самом деле создает новый строковый объект для новой последовательности знаков, а переменная b по-прежнему содержит "h".
string b = "h";
b += "ello";
Оператор [] служит для доступа только для чтения к отдельным знакам объекта string.
string str = "test";
char x = str[2]; // x = 's';
Строковые литералы имеют тип string и могут быть написаны в двух формах: в кавычках и в кавычках с @. Строковые литералы в кавычках заключены в двойные кавычки (").
"good morning" // a string literal
Строковые литералы могут содержать любые символьные литералы. Escape-последовательности также поддерживаются.
string a = "\\\u0066\n";
Эта строка содержит обратную косую черту, букву f и знак новой строки.
16) Методы: назначение, определение, вызов.
Метод представляет собой блок кода, содержащий набор инструкций. Программа инициирует выполнение операторов, вызывая метод и задавая необходимые аргументы метода. В C# все инструкции выполняются в контексте метода. Метод Main является точкой входа для каждого приложения C#, и вызывается он средой CLR при запуске программы.
Подписи метода
Методы объявляются в классе или в структуре путем указания уровня доступа, например public или private, необязательных модификаторов, например abstract илиsealed, возвращаемого значения, имени метода и списка параметров этого метода. Все вместе эти элементы образуют подпись метода.
Параметры заключаются в круглые скобки и разделяются запятыми. Пустые скобки указывают на то, что у метода нет параметров. Следующий класс содержит три метода.
abstract class Motorcycle
{
// Anyone can call this.
public void StartEngine() {/* Method statements here */ }
// Only derived classes can call this.
protected void AddGas(int gallons) { /* Method statements here */ }
// Derived classes can override the base class implementation.
public virtual int Drive(int miles, int speed) { /* Method statements here */ return 1; }
// Derived classes must implement this.
public abstract double GetTopSpeed();
}
Доступ к методам
Вызов
метода объекта очень похож на обращение
к полю. После имени объекта ставится
точка, затем имя метода и скобки. В
скобках перечисляются аргументы,
разделенные запятыми. Таким образом,
методы класса Motorcycle
можно
вызывать так, как показано в следующем
примере.
class TestMotorcycle : Motorcycle
{
public override double GetTopSpeed()
{
return 108.4;
}
static void Main()
{
TestMotorcycle moto = new TestMotorcycle();
moto.StartEngine();
moto.AddGas(15);
moto.Drive(5, 20);
double speed = moto.GetTopSpeed();
Console.WriteLine("My top speed is {0}", speed);
}
}
Параметры и аргументы методов
Определение метода задает имена и типы любых необходимых параметров. Когда код вызова вызывает метод, он предоставляет конкретные значения, называемые аргументами, для каждого параметра. Аргументы должны быть совместимыми с типом параметра, но имя параметра (если таковое имеется), используемое в коде вызова, не должно быть таким же, как параметр с именем, определенным в методе. Пример:
public void Caller()
{
int numA = 4;
// Call with an int variable.
int productA = Square(numA);
int numB = 32;
// Call with another int variable.
int productB = Square(numB);
// Call with an integer literal.
int productC = Square(12);
// Call with an expression that evaulates to int.
productC = Square(productA * 3);
}
int Square(int i)
{
// Store input argument in a local variable.
int input = i;
return input * input;
}
Передача по ссылке и передача по значению
По умолчанию при передаче методу типа значения передается копия объекта, а не сам объект. Поэтому изменения в аргументе не оказывают влияния на исходную копию в вызывающем методе. Тип значения по ссылке можно передать с помощью ключевого слова ref. Дополнительные сведения см. в разделе Передача параметров типа значения (руководство по программированию в C#). Полный список встроенных типов значений см. в разделе Таблица типов значений (Справочник по C#).
Ссылочные типы передаются по ссылке. При передаче методу объекта, имеющего ссылочный тип, ссылка указывает на исходный объект, а не на копию. Изменения объекта, осуществляемые с помощью этой ссылки, будут доступны и в вызывающем методе. В следующем примере ключевое слово class указывает на то, что создается объект ссылочного типа.
public class SampleRefType
{
public int value;
}
Теперь при передаче методу объекта этого типа объект будет передаваться по ссылке. Пример.
public static void TestRefType()
{
SampleRefType rt = new SampleRefType();
rt.value = 44;
ModifyObject(rt);
Console.WriteLine(rt.value);
}
static void ModifyObject(SampleRefType obj)
{
obj.value = 33;
}
В
этом примере выполняются те же действия,
что и в предыдущем примере. Но поскольку
используется ссылочный тип, изменения
в методе ModifyObject
относятся
к объекту, созданному в методе created in
the TestRefType
.
Поэтому в методе TestRefType
на
экран будет выведено значение 33.
Дополнительные сведения см. в разделах Передача параметров ссылочного типа (руководство по программированию в C#) и Ссылочные типы (Справочник по C#).