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

16. Свойства и поля класса

Поля (field) – обычно скрытые данные класса (внутренне состояние)

Поля класса

  • Состояние объектов класса (а также структур, интерфейсов) задается с помощью переменных, которые называются полями (fields).

  • При создании объекта – экземпляра класса, в динамической памяти выделяется участок памяти, содержащий набор полей, определяемых классом, и в них записываются значения, характеризующие начальное состояние данного экземпляра.

  • Объявление полей выполняется следующим образом:

[<режим_доступа>] [модификаторы] <тип> <имя>;

  • Общим правилом является создание закрытых полей, имеющих режим доступа private. Данный режим задается полям по умолчанию.

  • Любое воздействие на состояние объекта класса выполняется с использованием свойств или методов класса, которые контролируют последствия этих воздействий.

  • Если полям класса не задается значение при объявлении, то они автоматически инициализируются значениями по умолчанию.

    • Для значащих переменных – это нулевое значение,

    • Для строк – это пустая строка,

Для ссылочных переменных – это стандартное значение null.

Например, в классе Person заданы следующие поля:

private string name; // задается значение ""

private int age; // задается значение 0

private double salary; // задается значение 0.0

Свойства класса

  • Весьма полезный гибрид поля и методов: поле, доступ к которому и присваивание которому – программируемые операции

  • Используются для:

    • Реализации элементов данных, которые не могут быть изменены (для этого достаточно просто не включать метод set в описание свойства)

    • Проверок перед присваиванием (например, проверок полномочий)

    • Реализации вычисляемых (активных) значений

  • Пример:

public int Age

{

set {if (value > 0) _age = value;}

get {return(_age);}

}

18. Анонимные типы

  • Анонимные типы позволяют описать тип данных без формального описания класса

  • Например:

var book1 = new

{

ISBN = “978-0-470-17661-0”,

Title=”Professional Windows Vista Gadgets Programming”,

Author = “Wei-Meng Lee”,

Publisher=”Wrox”

};

  • Теперь book1 является объектом с 4 свойствами: ISBN , Title , Author , and Publisher.

  • Можно использовать имена переменных при назначении значений свойствам, например:

var Title = “Professional Windows Vista Gadgets Programming”;

var Author = “Wei-Meng Lee”;

var Publisher = “Wrox”;

var book1 = new { ISBN = “978-0-470-17661-0”, Title, Author, Publisher };

20. Расширяющие методы.

  • Расширяющий метод (extension method) это статический метод статического класса, который можно вызывать как будто он метод экземпляра другого класса

  • Например: можно создать расширяющий метод с именем ToDouble, который является статическим методом в статическом классе названный StringConversions, но который будет вызываться для объектов типа string.

  • Напоминание: Есть два типа методов:

    • Статические методы – вызываются с только после имени класса.

Array.Sort(ar);

    • Методы экземпляров класса – вызываются только после ссылки на объект класса.

ar.Length();

Пример:

\ static class MyExtensions

{

// данный метод позволяет у любой целой переменной поменять цифры в обратном порядке

// например, k = 56, то будет возвращаться, число 65.

public static int ReverseDigits(this int i)

{

// преобразуем в строку и преобразуем все символы в массив

char[] digits = i.ToString().ToCharArray();

// теперь переставляем элементы массива в обратном порядке

Array.Reverse(digits);

// преобразуем обратно массив символов в строку

string newDigits = new string(digits);

// и наконец возвращаем измененную строку Finally, return the modified string back as an int.

int rc = int.Parse(newDigits);

return rc;

}

}

Пример использования:

int k = 58;

int kr = k.ReverseDigits(); // kr = 85

Расширяющие методы для типа int:

static class Extensions

{

// удвоение значения

public static int Mult2(this int i)

{ i *= 2; return i; }

// утроение значения

public static int Mult3(this int i)

{ i *= 3; return i; }

}

int n =5;

int m = n.Mult3(); // m = 15