Тема 9. Интерфейсы

Простой интерфейс в C#.

interface IPerson
{
    void WriteName();
    void WriteAge();
    void WriteFullInfo();
}

Реализация интерфейса

interface IFormula
{
    int Calculate(int a, int b);
}

interface ITest
{
    bool IsAllOk();
}

class FormulaSum : IFormula, ITest
{
    public int Calculate(int a, int b)
    {
        return a + b;
    }

    public bool IsAllOk()
    {
        if (Calculate( 3, 8 ) != 11) return false;
        if (Calculate( -6, 2 ) != -4) return false;
        if (Calculate( -9, 24 ) != 15) return false;

        return true;
    }
}

class Calculator
{
    public static void doCalculate( IFormula Fm, bool WithTest )
    {
        if ( WithTest )
        {
            ITest t = ( ITest ) Fm;
            if ( ! t.IsAllOk() )
            {
                Console.WriteLine("Error !");
                return;
            }
        }

        int r = Fm.Calculate( 72, 89 );
        Console.WriteLine( "Result: " + r );
    }
}

Использование:

IFormula f = new FormulaSum();
Calculator.doCalculate(f, true);

Особенности:

Для интерфейсов употребляется выражение «Реализация» а не «Наследование». То есть говорят что класс реализует интерфейс, а не наследует интерфейс. Однако один интерфейс может наследовать другой интерфейс.

Класс может быть наследником только одного класса и реализовывать несколько интерфейсов.

В данной реализации класс Calculator выполняет две функции – тестирования и вычисления. Необходимо улучшить реализацию.

Реализация модульного тестирования

class Calculator2
{
    public static void doCalculate( IFormula Fm )
    {
        int r = Fm.Calculate(72, 89);
        Console.WriteLine("Result: " + r);
    }
}

class Tester
{
    public static bool IsOk( ITest t )
    {
        if (!t.IsAllOk())
        {
            Console.WriteLine("Error !");
            return false;
        }

        return true;
    }
}

Использование:

Совмещенное:

IFormula f = new FormulaSum();

if (Tester.IsOk((ITest)f))
{
    Calculator2.doCalculate(f);
}

Тестирование:

IFormula f = new FormulaSum();
Tester.IsOk( (ITest)f );

Эксплуатация:

IFormula f = new FormulaSum();
Calculator2.doCalculate(f);

Дополнительная литература

http://metanit.com/sharp/tutorial/3.9.php http://mycsharp.ru/post/36/2013_12_25_interfejsy_v_si-sharp_mnozhestvennoe_nasledovanie.html

results matching ""

    No results matching ""