Интерфейс отделяет потребителя от деталей реализации класса. Это помогает включить возможность многократного использования, поскольку класс, реализующий интерфейс, может измениться без необходимости изменения кода, потребляющего реализацию.
Это очень запутанно, может быть, пример помогает
public interface IUserAuthentication
{
public bool Authenticate(string name, string password);
}
Теперь я напишу потребителю, ему все равно, как выполняется аутентификация, он просто знает, что может аутентифицировать пользователей.
public class Consumer
{
private IUserAutentication _auth;
public Consumer(IUserAuthentication auth)
{
_auth = auth;
}
public void Working(string username, string password)
{
if (!_auth.Authenticate(username, password))
{
throw new Exception("error!");
}
}
}
Приведенный выше код будет работать независимо от реализации службы IUserAuthentication. Это один из способов повторного использования кода.
Теперь я могу реализовать интерфейс IUserAuthentication
public class AuthenticateJasons : IUserAuthentication
{
public bool Authenticate(string username, string password)
{
return username == "Jason";
}
}
public class AuthenticateNoone: IUserAuthentication
{
public bool Authenticate(string username, string password)
{
return false;
}
}
Дело в том, что эти реализации не имеют отношения к потребителю. Также этот вопрос не имеет отношения к ASP.NET веб-фреймворку. Это действительно вопрос, не зависящий от языка / платформы / фреймворка. Ответ один и тот же, независимо от языка, который вы выбираете для реализации.