Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Ссылка на самого себя в классах C#.



Ключевое слово this. При вызове любого нестатического метода класса в него неявно передается ссылка на объект. Называется эта ссылка this. Эту ссылку можно использовать в методе явно, а можно и опустить.

public void Print()

{

   Console. Writeline (this.data);

}

В статическом методе 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, // = О

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 позволяет определить, является ли выбранная символьная строка элементом указанного перечисления.

 


Поделиться:



Последнее изменение этой страницы: 2019-03-22; Просмотров: 1049; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.012 с.)
Главная | Случайная страница | Обратная связь