ООП основано на трёх базовых принципах: инкапсуляции, наследовании и полиморфизме. Для того чтобы считаться объектно-ориентированным язык должен поддерживать все три принципа.
Инкапсуляция – это связывание вместе данных и кода который ими манипулирует. Этосвойство языка программирования, позволяющее пользователю не задумываться о сложности реализации используемого программного компонента (что у него внутри?), а взаимодействовать с ним посредством предоставляемого интерфейса (публичных методов и членов), а также объединить и защитить жизненно важные для компонента данные.
В C# единицей инкапсуляции является класс. Класс определяет код и данные которые он инкапсулирует. Код и данные составляющие класс могут быть закрытыми или открытыми. Закрытые код и данные доступны только коду внутри класса. К ним нельзя обращаться из других частей программы. Открытые код и данные доступны для кода вне класса. К ним можно обращаться из других частей программы.
Класс может использоваться для создания экземпляров класса или объектов. Класс фактически определяет как создать объект.
Наследование.В ООП наследование позволяет создавать новый класс на основе существующего класса. Причём свойства и функциональность существующего класса наследуются новым классом. В новом классе в часть унаследованной функциональности можно внести изменения. Новый класс называется производным классом или классом потомком. Существующий класс называется базовым классом или классом предком.
Наследование может принимать две формы: наследование интерфейсов и наследование реализации. При наследовании реализации производный класс наследует поведение и возможности базового класса. При интерфейсном наследовании производный класс наследует имена и сигнатуры методов. В этом случае производный класс сам отвечает за реализацию этих методов.
В зависимости от того сколько базовых классов у класса потомка наследование бывает множественным и одиночным. При множественном наследовании у производного класса может быть несколько базовых классов. При одиночном наследовании у производного класса может быть только один базовый класс.
Полиморфизм – это процесс, посредством которого один объект может приобретать свойства другого. Точнее, объект может наследовать основные свойства другого объекта и добавлять к ним черты, характерные только для него. Для выражения смысла полиморфизма в программировании используется фраза “Один интерфейс - несколько методов”. В ОО языках программирования полиморфизм может быть реализован с помощью наследования. Один и тот же код в зависимости от того используется ли объект базового класса или класса потомка будет вызывать метод базового класса или переопределённый метод класса потомка.