74 lines
2.1 KiB
C#
74 lines
2.1 KiB
C#
|
using System;
|
|||
|
/*
|
|||
|
* явная реализация интерфейсов
|
|||
|
*/
|
|||
|
/// <summary>
|
|||
|
/// *класс может реализовать интерфейсы с одинаковыми методами
|
|||
|
/// *если нам нужна разная реализация для этих методов, то интерфейсы нужно реализовать явно
|
|||
|
/// </summary>
|
|||
|
interface IFirstInterface
|
|||
|
{
|
|||
|
void Action();
|
|||
|
}
|
|||
|
|
|||
|
interface ISecondInterface
|
|||
|
{
|
|||
|
void Action();
|
|||
|
}
|
|||
|
|
|||
|
class Actions : IFirstInterface, ISecondInterface
|
|||
|
{
|
|||
|
public void Action()
|
|||
|
=> Console.WriteLine($"{GetType().Name}: Action");
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Для таких случаев нужно использовать явную реализацию интерфейсов
|
|||
|
/// </summary>
|
|||
|
class OtherAction : IFirstInterface, ISecondInterface
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// Модификаторы ставить нельзя из-за неоднозначности и отсутствия ссылки на интерфейс
|
|||
|
/// </summary>
|
|||
|
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();
|
|||
|
}
|