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.
Интерфейсы не содержат никакого когда и никаких данных, в нем только определяются методы и свойства, которые должен предоставить класс, получающий наследование из интерфейса. Используя интерфейсы, можно отделить имена и сигнатуры методов класса от реализации методов.
Абстрактные классы во многом похожи на интерфейсы, но включают в себя данные и код. Но конкретные методы можно реализовать виртуальными, чтобы класс, получающий наследование, мог реализовать свои собственные реализации этих методов. Они часто используются совместно с интерфейсами для реализации расширяемых сред.
Запечатанные классы
Запечатанные методы