Вот пример интерфейса, который я когда-то использовал, который выполняет нечто подобное.
Main
namespace UnNamed Project
{
class Program
{
static void Main(string[] args)
{
User user;
user = new SuperUser("Bob", "12345");
if (user.Login())
{
Console.WriteLine($"Welcome {user.Name}");
}
else
{
Console.WriteLine("An error has occured.");
}
Utility.PauseBeforeContinuing();
}
}
}
Класс интерфейса
namespace UnNamed Project
{
interface ILoginHandler
{
bool HandleLogin();
void SetPassword(string password);
}
}
Класс пользователя
namespace UnNamed Project
{
abstract class User
{
private string _name;
private int _securityLevel;
public User(string name, int securityLevel)
{
_name = name;
_securityLevel = securityLevel;
}
abstract public bool Login();
}
}
Класс SuperUser
namespace UnNamed Project
{
class SuperUser : User
{
private ILoginHandler _loginHandler;
public SuperUser(string name, string password) : base(name, 10)
{
_loginHandler = new FaceLogin(password);
}
public override bool Login()
{
return _loginHandler.HandleLogin();
}
}
}
AsВы можете видеть, что при правильной настройке вы можете создать объект «Пользователь» и другой объект «Администратор», а затем создать абстрактный метод внутри пользователя.В качестве альтернативы вы можете использовать виртуальный метод для обработки входа в систему, просто убедитесь, что ваш класс администратора имеет переопределение для своего собственного метода Login ().Это заставит программу использовать метод, непосредственно связанный с объектом.