Вопрос про интерфейсы в c#

210
24 ноября 2018, 21:10

Пытаюсь по-нормальному понять интерфейсы в C# и столкнулся с таким вопросом:

К примеру, я хочу сделать интерфейс, который будет вызываться, если звонит телефон.

Интерфейс:

interface iPhone{
void onIncomingCall(String user);
}

Класс телефона:

public class MyPhone : iPhone{

void onIncomingCall(String user)
{
Console.WriteLine("Нам звонит: "+user);
Console.ReadKey();
}
}

И вот вопрос:

В официальной документации интерфейсов в C#

создаётся сначала объект класса, а затем уже объект интерфейса для КОНКРЕТНОГО класса.

class Test 
{
    static void Main()
    {
        SampleClass sc = new SampleClass();
        IControl ctrl = (IControl)sc;
        ISurface srfc = (ISurface)sc;
        // The following lines all call the same method.
        sc.Paint();
        ctrl.Paint();
        srfc.Paint();
    }
}
interface IControl
{
    void Paint();
}
interface ISurface
{
    void Paint();
}
class SampleClass : IControl, ISurface
{
    // Both ISurface.Paint and IControl.Paint call this method. 
    public void Paint()
    {
        Console.WriteLine("Paint method in SampleClass");
    }
}

А если я заранее не знаю, какие у меня вообще классы будут?

Зачем тогда вообще создавать объект интерфейса, а затем вызывать его, если можно просто вызвать метод этого класса через SampleClass.Paint() ?

Как можно вызвать этот метод у всех классов, которые наследуются от этого интерфейса?

Answer 1

Как можно вызвать этот метод у всех классов, которые наследуются от этого интерфейса?

public void SomebodyIsCalling(IPhone aPhone, string aCaller)
{
  aPhone.onIncomingCall(aCaller);
}
MyPhone phone1 = new MyPhone();
SomebodyIsCalling(phone1, "Пушкин");
IPhone phone2 = new HisPhone();
SomebodyIsCalling(phone2, "Некрасов");
Answer 2

Главное назначение интерфейсов в шарпе - это полиморфизм.

И вот этот пример:

SampleClass sc = new SampleClass();
IControl ctrl = (IControl)sc;
ISurface srfc = (ISurface)sc;

наглядно демонстрирует не какие-то там вызовы одного и того же, а именно полиморфизм - т.е. способность одного и того же класса иметь разный тип.

В общем, поймите, что такое полиморфизм и сразу станет понятно для чего интерфейсы и как их применять.

READ ALSO
Не передается GameObject в Unity3d

Не передается GameObject в Unity3d

Создал объект, прикрепил к нему скрипт, в котором используется GameObjectпри попытке прикрепить необходимый GameObject ничего не происходит

174
Библиотека InputSimulator в игре

Библиотека InputSimulator в игре

В игру не передает нажатие клавиш, несмотря на то, что окно активно

182
Unity поиск элементов UI через Ray

Unity поиск элементов UI через Ray

Можно ли через Ray найти UIPanel и узнать что написано в UI

139
Включение и отключение объекта в коде С# Unity 2d

Включение и отключение объекта в коде С# Unity 2d

При нажатии на кнопку "K" объект должен появлятся обратно, но он не появляется (в консоле ошибок нету)

137