Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Понятие «Класс», «Структура», «Объект» и «Индексатор»

Поиск

О классах, структурах и понятие «Модификатор доступа»

О классах, структурах и понятие «Модификатор доступа»

 

О классах и структурах

 

Классы и структуры являются двумя основными конструкциями системы общих типов CTS (Common Type System) в платформе .NET Framework. Каждая, по сути, является структурой данных, инкапсулирующей набор данных и поведение, связанные как логическая единица. Данные и поведение являются членами класса или конструкции, и в них включены методы, свойства, события, поля (переменные) и прочее.

Объявление класса или структуры подобно чертежу, который используется для создания экземпляров или объектов во время выполнения. При определении класса или структуры с именем Person, Person является именем типа. При объявлении или инициализации переменной p типа Person, p считается объектом или экземпляром Person. Возможно создание нескольких экземпляров одного типа Person, и каждый экземпляр может иметь разные значения в своих свойствах и полях.

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

Структура является типом значения. При создании структуры переменная, к которой она назначается, сохраняет фактические данные структуры. При назначении структуры новой переменной выполняется её копирование. Поэтому новая переменная и исходная переменная содержат две отдельных копии одних данных. Изменения, внесённые в одну копию, не влияют на другую копию.

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

 

В следующем примере на верхнем уровне пространства имён LC_Console определен класс MyCustomClass, содержащий три члена. Экземпляр (объект) класса MyCustomClass создаётся в методе Main класса Program, а для доступа к методам и свойствам используется точечная нотация («доступ по точке», наглядно демонстрируется при написании кода с включённой функцией среды разработки Visual Studio 2010 ― функцией IntelliSense):

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace LC_Console

{

// Класс

public class MyCustomClass

{

// Члены класса

// Свойство

public int Number { get; set; }

// Метод

public int Multiply(int num)

{

return num * Number;

}

 

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

public MyCustomClass()

{

Number = 0;

}

}

// Класс для метода Main, создан изначально средой разработки

class Program

{

static void Main()

{

// Создаём экземпляр класс

MyCustomClass myClass = new MyCustomClass();

// Задаём свойству значение

myClass.Number = 27;

// Вызываем метод и передаём ему цифру 4 (далее в методе идёт умножение на число 27)

int result = myClass.Multiply(4);

}

}

}

 

Основные особенности, которые будут (частично) раскрыты в теоретических материалах данного учебного курса позднее:

· Вложенные типы. Класс или структура может быть вложенной внутри другого класса или структуры.

· Специальные возможности. Некоторые методы и свойства предназначены для вызова или доступа из кода вне класса или структуры, известной как клиентский код. Другие методы и свойства могут использоваться только в самом классе или структуре. Важно ограничить доступность кода, чтобы он был доступен только предназначенному клиентскому коду. Пользователь задаёт доступность типов и их членов для клиентского кода с помощью модификаторов доступа: public, protected, internal, protected internal и private. Уровнем доступности по умолчанию является private.

· Наследование. Классы (но не структуры) поддерживают наследование. Класс, производный от другого (базового класса), автоматически включает все открытые, защищенные и внутренние члены базового класса, за исключением конструкторов и деструкторов.

· Универсальные типы. Классы и структуры можно определять с одним или несколькими параметрами типов. Тип указывается в клиентском коде при создании экземпляра данного типа. Например, класс List<T> пространства имён System.Collections.Generic определен с одним параметром. При создании экземпляра List<string> или List<int> указывается тип значений, которые можно будет хранить в этом списке.

· Статические типы. Классы (но не структуры) могут объявляться статическими. Статический класс может содержать только статические члены, и с помощью ключевого слова new нельзя будет создать экземпляр такого класса. Одна копия такого класса загружается в память при запуске программы, и все методы этого класса становятся доступными по имени класса. Классы и структуры могут содержать статические члены.

· Разделяемые типы. Существует возможность определить часть класса, структуры или метода в одном файле кода, а другую часть — в другом файле кода.

· Интерфейсы. Классы и структуры способны наследовать различным интерфейсам. Наследование интерфейсу означает, что в этом типе реализованы все методы, определённые в интерфейсе.

· Анонимные типы. В случаях, когда создавать именованный класс неудобно или не требуется, например, при заполнении списка структурами данных, которые не нужно сохранять или передавать другому методу, используются анонимные типы.

· Расширение классов. Существует возможность расширять класс без создания производного класса. Для этого создается отдельный тип, к методам которого можно обращаться, как если бы они принадлежали исходному типу.

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

· Члены класса или структуры. Все методы, поля (переменные), константы, свойства и события должны быть объявлены внутри типа; они называются членами класса или структуры. В C# не существует глобальных переменных или методов, как в некоторых других языках. Даже точка входа программы, метод Main, должен быть объявлен внутри класса или структуры. Члены класса включают все члены, объявленные в этом классе, а также все члены (кроме конструкторов и деструкторов), объявленные во всех классах в иерархии наследования данного класса.Закрытые члены в базовых классах наследуются, но недоступны из производных классов. В следующем списке перечислены все возможные типы членов, которые можно объявлять в классе или в структуре:

 

Элемент Описание
Поля (переменные) Поля являются переменными, объявленными в области класса. Поле может иметь встроенный числовой тип или быть экземпляром другого класса. Например, в классе календаря может быть поле, содержащее текущую дату
Константы Константы — это поля или свойства, значения которых устанавливаются во время компиляции и не изменяются.
Свойства Свойства — это методы класса. Доступ к ним осуществляется так же, как если бы они были полями этого класса. Свойство может защитить поле класса от изменений (независимо от объекта)
Методы Методы определяют действия, которые может выполнить класс. Методы могут получать параметры, предоставляющие входные данные, и возвращать выходные данные посредством параметров. Также методы могут возвращать значения напрямую, без использования параметров
События События предоставляют другим объектам уведомления о различных случаях, таких как нажатие кнопки или успешное выполнение метода. События определяются и переключаются с помощью делегатов.   Дополнительные сведения можно получить в разделе События и делегаты (http://msdn.microsoft.com/ru-ru/library/17sde2xt.aspx)
Операторы Перегруженные операторы рассматриваются как члены класса. При перегрузке оператора его следует определить как открытый статический метод в классе. Предопределенные операторы (+, *, < и т. д.) не считаются членами
Индексаторы Индексаторы позволяют индексировать объекты аналогично массивам
Конструкторы Конструкторы — это методы классов, вызываемые при создании объекта заданного типа. Зачастую они используются для инициализации данных объекта
Деструкторы Деструкторы очень редко используются в C#. Они являются методами, вызываемыми средой выполнения, когда объект нужно удалить из памяти. Деструкторы обычно применяются для правильной обработке ресурсов, которые должны быть высвобождены
Вложенные типы Вложенными типами являются типы, объявленные в другом типе. Вложенные типы часто применяются для описания объектов, использующихся только типами, в которых эти объекты находятся

 

Об инкапсуляции иногда говорят как о первом базовом элементе или принципе объектно-ориентированного программирования. Согласно принципу инкапсуляции класс или структура может задать уровень доступности каждого из членов по отношению к коду вне класса или структуры. Методы и переменные, которые не предназначены для использования вне класса или сборки, могут быть скрыты, чтобы ограничить потенциальную угрозу возникновения ошибок кода или вредоносное использование.

 



Поделиться:


Последнее изменение этой страницы: 2016-08-15; просмотров: 426; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.216.161.178 (0.011 с.)