C#

C#


Фильтры исключений: принимают булево выражение, перед которым ставится слово when.

catch(Exception ex) when (ex.GetType != typeof(System.OutOfMemoryException)){}

Checked && Unchecked: Если целочисленное выражение приводит к переполнению.

int wThrow = unchecked(int.MaxValue+1); int wlThrow = checked(int.MaxValue+1);

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

Private методы доступны только внутри класса.

Public открытый метод.

Перегрузка - техническое понятие, для создания одного или более методов с одним и тем же именем и в одном и том же пространстве имен.

Необязательные параметры - в методе string x = "10". Именновванные аргументы optMeth(first:100)

This - обращение к текущему экземпляру класса.

Статические классы использутю только статические элементы. Все объекты класса используют одну и ту же копию элементов класса совместно.

Безымянные классы var myObject = new {Name = "John", Age = 47 }

Null значения переменных int? = null;

Ref параметры: Если перед переменной поставить ключевое слово ref, то компилятор создаст код, передающий ссылку на сам аргумент, а не на его копию.

Out параметр: компилятор передает значение из метода (output).

Упаковка - автоматическое копирование элемента из стека в кучу

int i = 42; (Тип значений и находится в стеке)
object o = i; (Копия находится в динамической памяти т.к ссылаться на стек не безопасно и object уже (в свою очередь) ссылается на копию в ДП)

Распаковка - получение объекта через приведение типа

int i = (int) o;

Оператор is используется для проверки факта принадлежности объекта к тому или иному типу if(o is WrappedInt).

Оператор as используется в тех же целях, что и is, но в усеченном виде.

WrappedInt temp = o as WrappedInt; - Исполняющая среда пытается привести объект к укаханному типу. Если приведение проходит успешно, тогда возвращается его результат. В противном случае возвращается null;

(операнд) as (операнд)

Перечисления

enum Season {Spring(=0), Fall}
Season.Spring++; // Fall
Season x = Season.Spring; int(x) // = 0

Структуры во многом похожи на классы но существует ряд отличий.

Невозможно объявить пассивный конструктор.
Структура относится к типу значения.
Экземпляры структур помещаются в стеке.
Пассивный конструктор определяется самостоятельно.
Инициализация полей в структуре обязательна.

Массивы относятся к ссылочным типам.

int[] pins = new int[size];
int[] pins = new int[4] {1,2,3,4};
int[] pins = {1,2,3,4};
foreach(int pin in pins)
public void Hello(int[] hello);
public void Hello(params int[] hello); - params отвечает за передачу переменного количества аргументов те возможно сделать вот так: public void Hello(one, two);
int[,] = new int[4,6];

При различных сценариях можно использовать массив, в котором все столбцы имеют разную длинну. (ступенчатый)

Наследование

class ПроизводныйКласс : БазовыйКласс {}

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

Вызов конструкторов базового класса: class Horse : Mammal { public Horse(string name):base(name)//вызывает Mammal(name)}

Виртуальные методы: Метод, предназначенный для перегрузки, называется виртуальным. Перегрузка метода - механизм, предоставляющий создание различных реализаций одного и того же метода (родственные методы). Сокрытие метода - средство замены одного метода другим (не обязательно родственные методы).

public virtual string ToString()

Если в базовом классе метод объявлен виртуальным, то в производном классе он может быть overrided в производном классе.

public override string ToString()

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

public override string ToString() {string temp = base.ToString();}

Методы расширения

Наследование от структур невозможно. Тогда сущемствует следующее:

public static int Negate(this int i){ return -i; }

Ключевое слово this означает, что расширению подвергается тип int.

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

Абстрактные классы во многом похожи на интерфейсы, но включают в себя данные и код. Но конкретные методы можно реализовать виртуальными, чтобы класс, получающий наследование, мог реализовать свои собственные реализации этих методов. Они часто используются совместно с интерфейсами для реализации расширяемых сред.

Запечатанные классы

Запечатанные методы







Report Page