Интерфейс — это тип ссылки, который может только объявлять:
- свойства
- методы
- индексаторы
- события
Все члены интерфейса, по своей сути являются абстрактными.
По умолчанию, все члены интерфейса имеют модификатор public.
Класс, который реализует интерфейс, должен реализовать все члены, объявленные в интерфейсе.
По умолчанию, все члены интерфейса имеют модификатор public.
Класс, который реализует интерфейс, должен реализовать все члены, объявленные в интерфейсе.
Синтаксис:
[атрибут] модификатор interface имя_интерфеса : [имя_базового_интерфеса] {
тип имя_метода (список параметров);
//члены интерфейса
}
[атрибут] модификатор interface имя_интерфеса : [имя_базового_интерфеса] {
тип имя_метода (список параметров);
//члены интерфейса
}
обычный интерфейс
Main.cs
usingSystem;publicinterfaceIResultShow {-
/*по умолчанию модификатор доступа у членов интерфейса -
public, ВНИМАНИЕ! явно объявлять его НЕ НУЖНО!*/ -
ushortResultShow(); }publicinterfaceISum {-
/*по умолчанию модификатор доступа у членов интерфейса -
public, ВНИМАНИЕ! явно объявлять его НЕ НУЖНО!*/ -
decimalSum(); }//если класс реализует более одного интерфейса, то они указываются через запятуюpublicclassCounter : IResultShow, ISum {-
ushortshowStart; -
ushortshowEnd; -
decimalprice; -
publicCounter(ushortarg0,ushortarg1,decimalarg2) { -
showStart = arg0; -
showEnd = arg1; -
price = arg2; -
} -
publicushortResultShow() { -
return(ushort)(showEnd-showStart); -
} -
publicdecimalSum() { -
returnMath.Round((decimal)(ResultShow()*price), 2); -
} }classProgram {-
publicstaticintMain() { -
Console.WriteLine("оплата за электроэнергию\n"); -
Console.Write("Введите начальные показания счетчика : "); -
ushortshow_start =ushort.Parse(Console.ReadLine()); -
Console.Write("Введите конечные показания счетчика : "); -
ushortshow_end =ushort.Parse(Console.ReadLine()); -
Console.Write("Введите цену за 1 кВт/ч : "); -
decimalprice =decimal.Parse(Console.ReadLine()); -
Counter C =newCounter(show_start, show_end, price); -
Console.WriteLine("Сумма за электроэнергию : {0}", C.Sum()); -
Console.ReadKey(); -
return0; -
} }
usingSystem;publicinterfaceIResultShow {-
/*по умолчанию модификатор доступа у членов интерфейса -
public, ВНИМАНИЕ! явно объявлять его НЕ НУЖНО!*/ -
ushortResultShow(); }publicinterfaceISum {-
/*по умолчанию модификатор доступа у членов интерфейса -
public, ВНИМАНИЕ! явно объявлять его НЕ НУЖНО!*/ -
decimalSum(); }//если класс реализует более одного интерфейса, то они указываются через запятуюpublicclassCounter : IResultShow, ISum {-
ushortshowStart; -
ushortshowEnd; -
decimalprice; -
publicCounter(ushortarg0,ushortarg1,decimalarg2) { -
showStart = arg0; -
showEnd = arg1; -
price = arg2; -
} -
publicushortResultShow() { -
return(ushort)(showEnd-showStart); -
} -
publicdecimalSum() { -
returnMath.Round((decimal)(ResultShow()*price), 2); -
} }classProgram {-
publicstaticintMain() { -
Console.WriteLine("оплата за электроэнергию\n"); -
Console.Write("Введите начальные показания счетчика : "); -
ushortshow_start =ushort.Parse(Console.ReadLine()); -
Console.Write("Введите конечные показания счетчика : "); -
ushortshow_end =ushort.Parse(Console.ReadLine()); -
Console.Write("Введите цену за 1 кВт/ч : "); -
decimalprice =decimal.Parse(Console.ReadLine()); -
Counter C =newCounter(show_start, show_end, price); -
Console.WriteLine("Сумма за электроэнергию : {0}", C.Sum()); -
Console.ReadKey(); -
return0; -
} }
оплата за электроэнергию
Введите начальные показания счетчика : 0
Введите конечные показания счетчика : 100
Введите цену за 1 кВт/ч : 0,3084
Сумма за электроэнергию : 30,84
Введите начальные показания счетчика : 0
Введите конечные показания счетчика : 100
Введите цену за 1 кВт/ч : 0,3084
Сумма за электроэнергию : 30,84
явная реализация
Если в двух интерфейсах объявлены методы с одинаковыми именами и класс реализует эти интерфейсы, то обязательно понадобится явная реализация.
Main.cs
usingSystem;publicinterfaceIA {-
voidMessage(); }publicinterfaceIB {-
voidMessage(); }//если класс реализует более одного интерфейса, то они указываются через запятуюclassOne : IA, IB {-
//явная реализация, указывается полное имя интерфейса, точка метод -
//ВНИМАНИЕ! при явной реализации модификаторы НЕ УКАЗЫВАЮТСЯ -
voidIA.Message() { -
Console.WriteLine("Привет Мир!"); -
} -
voidIB.Message() { -
Console.WriteLine("Hello World!"); -
} }classProgram {-
publicstaticintMain() { -
//ВНИМАНИЕ! через объект класса получить доступ к методам нельзя -
One O =newOne(); -
//создаем ссылку на интерфейс IA -
IA Aref = O; -
//доступ к методу с помощью ссылки -
Aref.Message(); -
//создаем ссылку на интерфейс IB -
IB Bref = O; -
//доступ к методу с помощью ссылки -
Bref.Message(); -
Console.ReadKey(); -
return0; -
} }
usingSystem;publicinterfaceIA {-
voidMessage(); }publicinterfaceIB {-
voidMessage(); }//если класс реализует более одного интерфейса, то они указываются через запятуюclassOne : IA, IB {-
//явная реализация, указывается полное имя интерфейса, точка метод -
//ВНИМАНИЕ! при явной реализации модификаторы НЕ УКАЗЫВАЮТСЯ -
voidIA.Message() { -
Console.WriteLine("Привет Мир!"); -
} -
voidIB.Message() { -
Console.WriteLine("Hello World!"); -
} }classProgram {-
publicstaticintMain() { -
//ВНИМАНИЕ! через объект класса получить доступ к методам нельзя -
One O =newOne(); -
//создаем ссылку на интерфейс IA -
IA Aref = O; -
//доступ к методу с помощью ссылки -
Aref.Message(); -
//создаем ссылку на интерфейс IB -
IB Bref = O; -
//доступ к методу с помощью ссылки -
Bref.Message(); -
Console.ReadKey(); -
return0; -
} }
Привет Мир!
Hello World!
Hello World!