Интерфейс — это тип ссылки, который может только объявлять:
- свойства
- методы
- индексаторы
- события
Все члены интерфейса, по своей сути являются абстрактными.
По умолчанию, все члены интерфейса имеют модификатор public.
Класс, который реализует интерфейс, должен реализовать все члены, объявленные в интерфейсе.
По умолчанию, все члены интерфейса имеют модификатор public.
Класс, который реализует интерфейс, должен реализовать все члены, объявленные в интерфейсе.
Синтаксис:
[атрибут] модификатор interface имя_интерфеса : [имя_базового_интерфеса] {
тип имя_метода (список параметров);
//члены интерфейса
}
[атрибут] модификатор interface имя_интерфеса : [имя_базового_интерфеса] {
тип имя_метода (список параметров);
//члены интерфейса
}
обычный интерфейс
Main.cs
using
System;
public
interface
IResultShow {
-
/*по умолчанию модификатор доступа у членов интерфейса
-
public, ВНИМАНИЕ! явно объявлять его НЕ НУЖНО!*/
-
ushort
ResultShow();
}
public
interface
ISum {
-
/*по умолчанию модификатор доступа у членов интерфейса
-
public, ВНИМАНИЕ! явно объявлять его НЕ НУЖНО!*/
-
decimal
Sum();
}
//если класс реализует более одного интерфейса, то они указываются через запятую
public
class
Counter : IResultShow, ISum {
-
ushort
showStart;
-
ushort
showEnd;
-
decimal
price;
-
public
Counter(
ushort
arg0,
ushort
arg1,
decimal
arg2) {
-
showStart = arg0;
-
showEnd = arg1;
-
price = arg2;
-
}
-
public
ushort
ResultShow() {
-
return
(
ushort
)(showEnd-showStart);
-
}
-
public
decimal
Sum() {
-
return
Math.Round((
decimal
)(ResultShow()*price), 2);
-
}
}
class
Program {
-
public
static
int
Main() {
-
Console.WriteLine(
"оплата за электроэнергию\n"
);
-
Console.Write(
"Введите начальные показания счетчика : "
);
-
ushort
show_start =
ushort
.Parse(Console.ReadLine());
-
Console.Write(
"Введите конечные показания счетчика : "
);
-
ushort
show_end =
ushort
.Parse(Console.ReadLine());
-
Console.Write(
"Введите цену за 1 кВт/ч : "
);
-
decimal
price =
decimal
.Parse(Console.ReadLine());
-
Counter C =
new
Counter(show_start, show_end, price);
-
Console.WriteLine(
"Сумма за электроэнергию : {0}"
, C.Sum());
-
Console.ReadKey();
-
return
0;
-
}
}
using
System;
public
interface
IResultShow {
-
/*по умолчанию модификатор доступа у членов интерфейса
-
public, ВНИМАНИЕ! явно объявлять его НЕ НУЖНО!*/
-
ushort
ResultShow();
}
public
interface
ISum {
-
/*по умолчанию модификатор доступа у членов интерфейса
-
public, ВНИМАНИЕ! явно объявлять его НЕ НУЖНО!*/
-
decimal
Sum();
}
//если класс реализует более одного интерфейса, то они указываются через запятую
public
class
Counter : IResultShow, ISum {
-
ushort
showStart;
-
ushort
showEnd;
-
decimal
price;
-
public
Counter(
ushort
arg0,
ushort
arg1,
decimal
arg2) {
-
showStart = arg0;
-
showEnd = arg1;
-
price = arg2;
-
}
-
public
ushort
ResultShow() {
-
return
(
ushort
)(showEnd-showStart);
-
}
-
public
decimal
Sum() {
-
return
Math.Round((
decimal
)(ResultShow()*price), 2);
-
}
}
class
Program {
-
public
static
int
Main() {
-
Console.WriteLine(
"оплата за электроэнергию\n"
);
-
Console.Write(
"Введите начальные показания счетчика : "
);
-
ushort
show_start =
ushort
.Parse(Console.ReadLine());
-
Console.Write(
"Введите конечные показания счетчика : "
);
-
ushort
show_end =
ushort
.Parse(Console.ReadLine());
-
Console.Write(
"Введите цену за 1 кВт/ч : "
);
-
decimal
price =
decimal
.Parse(Console.ReadLine());
-
Counter C =
new
Counter(show_start, show_end, price);
-
Console.WriteLine(
"Сумма за электроэнергию : {0}"
, C.Sum());
-
Console.ReadKey();
-
return
0;
-
}
}
оплата за электроэнергию
Введите начальные показания счетчика : 0
Введите конечные показания счетчика : 100
Введите цену за 1 кВт/ч : 0,3084
Сумма за электроэнергию : 30,84
Введите начальные показания счетчика : 0
Введите конечные показания счетчика : 100
Введите цену за 1 кВт/ч : 0,3084
Сумма за электроэнергию : 30,84
явная реализация
Если в двух интерфейсах объявлены методы с одинаковыми именами и класс реализует эти интерфейсы, то обязательно понадобится явная реализация.
Main.cs
using
System;
public
interface
IA {
-
void
Message();
}
public
interface
IB {
-
void
Message();
}
//если класс реализует более одного интерфейса, то они указываются через запятую
class
One : IA, IB {
-
//явная реализация, указывается полное имя интерфейса, точка метод
-
//ВНИМАНИЕ! при явной реализации модификаторы НЕ УКАЗЫВАЮТСЯ
-
void
IA.Message() {
-
Console.WriteLine(
"Привет Мир!"
);
-
}
-
void
IB.Message() {
-
Console.WriteLine(
"Hello World!"
);
-
}
}
class
Program {
-
public
static
int
Main() {
-
//ВНИМАНИЕ! через объект класса получить доступ к методам нельзя
-
One O =
new
One();
-
//создаем ссылку на интерфейс IA
-
IA Aref = O;
-
//доступ к методу с помощью ссылки
-
Aref.Message();
-
//создаем ссылку на интерфейс IB
-
IB Bref = O;
-
//доступ к методу с помощью ссылки
-
Bref.Message();
-
Console.ReadKey();
-
return
0;
-
}
}
using
System;
public
interface
IA {
-
void
Message();
}
public
interface
IB {
-
void
Message();
}
//если класс реализует более одного интерфейса, то они указываются через запятую
class
One : IA, IB {
-
//явная реализация, указывается полное имя интерфейса, точка метод
-
//ВНИМАНИЕ! при явной реализации модификаторы НЕ УКАЗЫВАЮТСЯ
-
void
IA.Message() {
-
Console.WriteLine(
"Привет Мир!"
);
-
}
-
void
IB.Message() {
-
Console.WriteLine(
"Hello World!"
);
-
}
}
class
Program {
-
public
static
int
Main() {
-
//ВНИМАНИЕ! через объект класса получить доступ к методам нельзя
-
One O =
new
One();
-
//создаем ссылку на интерфейс IA
-
IA Aref = O;
-
//доступ к методу с помощью ссылки
-
Aref.Message();
-
//создаем ссылку на интерфейс IB
-
IB Bref = O;
-
//доступ к методу с помощью ссылки
-
Bref.Message();
-
Console.ReadKey();
-
return
0;
-
}
}
Привет Мир!
Hello World!
Hello World!