using System;
/*
* явная реализация интерфейсов
*/
///
/// *класс может реализовать интерфейсы с одинаковыми методами
/// *если нам нужна разная реализация для этих методов, то интерфейсы нужно реализовать явно
///
interface IFirstInterface
{
void Action();
}
interface ISecondInterface
{
void Action();
}
class Actions : IFirstInterface, ISecondInterface
{
public void Action()
=> Console.WriteLine($"{GetType().Name}: Action");
}
///
/// Для таких случаев нужно использовать явную реализацию интерфейсов
///
class OtherAction : IFirstInterface, ISecondInterface
{
///
/// Модификаторы ставить нельзя из-за неоднозначности и отсутствия ссылки на интерфейс
///
void IFirstInterface.Action()
{
Console.WriteLine($"IFirstInterface Action");
}
void ISecondInterface.Action()
{
Console.WriteLine($"ISecondInterface Action");
}
}
class Program
{
static void Main()
{
var act = new Actions();
Action_1(act);
Action_2(act);
var otherAction = new OtherAction();
Action_1(otherAction);
Action_2(otherAction);
((IFirstInterface)otherAction).Action();
((ISecondInterface)otherAction).Action();
// более безопасный с операторами as или is
if (otherAction is IFirstInterface firstInterface)
firstInterface.Action();
if (otherAction is ISecondInterface secondInterface)
secondInterface.Action();
Console.ReadKey();
}
public static void Action_1(IFirstInterface firstInterface)
=> firstInterface.Action();
public static void Action_2(ISecondInterface secondInterface)
=> secondInterface.Action();
}