Пытаюсь по-нормальному понять интерфейсы в 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() ?
Как можно вызвать этот метод у всех классов, которые наследуются от этого интерфейса?
Как можно вызвать этот метод у всех классов, которые наследуются от этого интерфейса?
public void SomebodyIsCalling(IPhone aPhone, string aCaller)
{
aPhone.onIncomingCall(aCaller);
}
MyPhone phone1 = new MyPhone();
SomebodyIsCalling(phone1, "Пушкин");
IPhone phone2 = new HisPhone();
SomebodyIsCalling(phone2, "Некрасов");
Главное назначение интерфейсов в шарпе - это полиморфизм.
И вот этот пример:
SampleClass sc = new SampleClass();
IControl ctrl = (IControl)sc;
ISurface srfc = (ISurface)sc;
наглядно демонстрирует не какие-то там вызовы одного и того же, а именно полиморфизм - т.е. способность одного и того же класса иметь разный тип.
В общем, поймите, что такое полиморфизм и сразу станет понятно для чего интерфейсы и как их применять.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Создал объект, прикрепил к нему скрипт, в котором используется GameObjectпри попытке прикрепить необходимый GameObject ничего не происходит
В игру не передает нажатие клавиш, несмотря на то, что окно активно
При нажатии на кнопку "K" объект должен появлятся обратно, но он не появляется (в консоле ошибок нету)