Знаю что это разные понятия, но объяснения толкового в чем разница не нашел.
Инкапсуляция - одна из основных парадигм ООП, которая, по сути, представляет собой способность языка скрывать определённые участки кода в блоки, забирая тем самым возможность у пользователя (или любого другого стороннего субъекта) нарушать целостность данного кода, вмешиваться в реализацию и тд. Основной единицей инкапсуляции в C# является класс. Инкапсуляция позволяет качественно структурировать код и помогает обезопасить его от многих возможных проблем и вопросов, касательно защиты данных и информации.
Итак, если инкапсуляция обеспечивает своего рода целостность объекта, то сокрытие - скрывает детали о процессе. Для "настройки" доступа к данным в классе и к классу непосредственно используются так называемые модификаторы доступа. Так вот использование этих модификаторов доступа и есть сокрытие.
Термин "сокрытие", как правило, употребляется в контексте методов. Сокрытие метода представляет собой определение тела метода в классе-наследнике, сигнатура которого соответствует сигнатуре метода в базовом классе. Для техники сокрытия применяется ключевое слово "new".
Пример сокрытия метода.
class Animal { public void Say() { Console.WriteLine("*Some sounds*"); } } class Cat:Animal { public new void Say()// the usage of hiding technique { Console.WriteLine("Miew!"); } }
Вообще, говоря о сокрытии, лучше использовать данный термин в контексте именно сокрытия метода, потому что нет какого-то определённого общепринятого правила отличия инкапсуляции и сокрытия, и на этому почве могут возникать всякие разногласия.
Подробнее об основах и парадигмах языка C# Вы можете узнать на видеокурсах C# Starter и C# Essential