Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика ответы.docx
Скачиваний:
56
Добавлен:
10.05.2015
Размер:
270.28 Кб
Скачать

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#).