C# Паттерн NVI

Что это за паттерн и где он встречается в C#? Если можно, то также напишете где и когда его нужно использовать.

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

Если можно, то также напишете где и когда его нужно использовать.

Если вашим классом будут пользоваться другие программисты и в будущем вы будете его изменять, то нужно использовать данный паттерн (причина этого описана выше).

Также не забывайте, что изначальное название данного патерна было "шаблонный метод".