Использование ключевого слова this в C#. 


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



ЗНАЕТЕ ЛИ ВЫ?

Использование ключевого слова this в C#.



 

Каждый объект сопровождается указателем на самого себя — называемым указателем this – это неявный аргумент во всех ссылках на элементы внутри этого объекта. Указатель this можно использовать также и явно. Каждый объект может опре­делить свой собственный адрес с помощью ключевого слова this. Указатель this неявно используется для ссылки как на данные-элементы, так и на функции-элементы объекта. Тип указателя this зависит от типа объекта и от того, объявлена ли функция-элемент, в которой используется this, как const. Указатель this передается как скрытый аргумент при вызове нестатич. ф-ций. Ключевое слово this представляет собой локальную переменную, доступную в теле нестатич. функц-ком-та. Элемент this не требует объявления, явная ссылка на него не явл. ошибкой.

Каждая функция-элемент имеет доступ к указателю this на объект, для которого вызван этот элемент. Одним интересным применением указателя this является предотвращение присваивания объекта самому себе. Другим применением указателя this является возможность сцепленных вызовов функций элементов.

Синтаксис C# допускает, чтобы имя параметра или локальной переменной совпадало с именем переменной экземпляра. И тогда доступ к скрытой переменной экземпляра можно получить с помощью ссылки this.


13. Передача параметров методов в C#

Методы в С# используют параметры для передачи значений, для возвращения результата или для обеих этих целей одновременно. Для обозначения направления передачи используются модификаторы – ключевые слова, стоящие перед описанием параметров.

1. нет модификатора – входной параметр, он передается как значение;

2. Out – выходной параметр, возвращающий значение из метода;

3. Ref – передача параметра по ссылке. Исходное значение присваивается вызывающему методу, но оно может м.б. изменено вызванным;

4. params – обозначает набор параметров. Такой параметр м.б. только один и в списке параметров должен идти последним. Для каждого параметра указывается его тип и имя.

Int x,y – неверно

Int x, int y – верно

При вызове метода в C# следует указывать модификаторы параметров.

Public void Set (out int x)

{

-x = 12;

}

Входные параметры и параметры пол ссылке д.б. инициализированы вызываемым методом. Выходной параметр инициализировать необязательно.

int y;

O.Set (out y);

 


14. Структурные (value-based) и ссылочные (reference-based) типы.

В C# каждый доступный тип является классом. У всех есть один общий предок – класс System.Object или просто Object. К структуре относятся все типы, произведенные от класса System.ValueType, который в свою очередь является прямым наследником класса System.Object. К структурным относятся все числовые типы данных (int, float), все структуры и все перечисления.

Особенности структурных типов данных:

1. память выделяется в стеке;

2. во время присваивания создается побитовая копия в новом участке памяти;

3. данные типы не могут выступать в качестве базовых (от них наследовать нельзя);

4. при передаче параметра такого типа создается его побитовая копия (в стеке);

5. для структурных типов нельзя определить конструктор по умолчанию самостоятельно. Он в любом случае создается системой и присваивает всем полям значения по умолчанию;

6. пользовательские структурные типы данных создаются с помощью ключевого слова struct. В остальном их описание аналогично описанию классов.

Объекты структур также, как и объекты классов м.б. созданы с помощью ключевого слова new. Но структуры можно создавать не используя этот оператор. Если объект структуры создается без использования new, то поля будут не инициализированы. Сами структуры могут наследоваться только от интерфейса, а не от классов или других структур. Использование структур эффективно для представления небольших объектов (< 16 байт). Уничтожение переменной структурного типа происходит при выходе из области видимости.

К ссылочным типам относятся классы и интерфейс. Особенности ссылочных типов: 1) память выделяется в куче (управляемая куча managed heap). В стеке хранится ссылка на эту область;

2) во время присваивания создается еще одна ссылка на туже самую область;

3) при передаче параметра передается только ссылка на него. Конструктор по умолчанию м.б. переопределен. Объект создается только с помощью new. Другим способом выделить новую память невозможно. Уничтожение объекта происходит во время сборки мусора garbage collection.

 

Перечисляемые типы в C#.

Часто бывает удобным создать набор значимых имен, которые будут представлять числовые значения. С#, как и C/C++, предоставляет возможность использовать для этой цели перечисления (enumerations).

enum EmpType

{

Manager, // = 0

Grunt, // = 1

Contractor, // = 2

VP // = 3

}

По умолчанию в перечислениях С# первому элементу соответствует числовое значение 0, второму — n+1, третьему — n+2 и т. д. При необходимости можно изменить исходную точку отсчета. Для элементов перечисления вовсе не обязательно использовать строго последовательные числовые значения.

Компилятор попросту подставляет вместо элементов перечисления соответствующие числовые значения. По умолчанию для этих числовых значений компилятор использует тип данных Int. Можно использовать другой тип данных

enum EmpType:byte

{

Manager = 10,

Grunt = 1,

Contractor = 100,

VP = 99

}

Все перечисления в С# происходят от единого базового класса System. Enum. В этом базовом классе предусмотрены методы для работы с перечислениями.

Статический метод GetUnderlyingType() - позволяет получить информацию о том, какой тип данных используется для представления числовых значений элементов перечисления.

Статический метод GetValues() возвращает экземпляр System. Array, при этом каждому элементу массива будет соответствовать член указанного перечисления.

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

 

Перегрузка операторов в C#.

В С#, как и в любом другом языке программирования, предусмотрен набор специальных символов для выполнения самых распространенных операций с внутренними типами данных. Язык С# (подобно C++ и в противоположность Java) позволяет создавать пользовательские классы и структуры, которые будут реагировать по-своему (как мы определим) на те же самые встроенные операторы, например на оператор сложения «+». Этот прием называется перегрузкой операторов.

Перегруженные операторы — это всего лишь более дружественная по отношению к пользователю класса разновидность открытого метода. Кроме того, не следует забывать о несовместимости этого средства с Common Language Specification. Поэтому при создании пользовательских классов, предназначенных для работы в реальных рабочих приложениях, всегда снабжайте перегруженные операторы обычными методам их аналогами. Можно передавать вызовы от перегруженного оператора обычному методу.

public class Point

{

public static Point operator + (Point pi. Point p2)

{return AddPointsCpl. p2);}

public static Point AddPoints (Point pi, Point p2)

{return new Pointtpl.x + p2.x. pi. у + p2.y);}

}

 



Поделиться:


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

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