Явная реализация интерфейса
Член помечают как ИмяИнтерфейса.ИмяЧлена
без модификатора public.
Снаружи класса такой метод виден только при
приведении к интерфейсу. Это удобно, когда
одинаковые сигнатуры нужны у нескольких
контрактов или их надо скрыть от клиента
класса.
Синтаксис
тип IContract.Метод(параметры)
{
// тело
}
Пример
Давайте вызовем метод через переменную интерфейса:
using System;
interface IShow
{
string Show();
}
class Holder : IShow
{
string IShow.Show()
{
return "abcde";
}
}
class Program
{
static void Main()
{
IShow item = new Holder();
Console.WriteLine(item.Show());
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте сравним публичный и явный метод с одним именем:
using System;
interface IValue
{
int GetValue();
}
class Cell : IValue
{
public int GetValue()
{
return 1;
}
int IValue.GetValue()
{
return 2;
}
}
class Program
{
static void Main()
{
var cell = new Cell();
IValue via = cell;
Console.WriteLine(cell.GetValue() + " " + via.GetValue());
}
}
Результат выполнения кода:
1 2
Пример
Давайте реализуем два интерфейса с разным поведением:
using System;
interface IFirst
{
string Read();
}
interface ISecond
{
string Read();
}
class Dual : IFirst, ISecond
{
string IFirst.Read()
{
return "12345";
}
string ISecond.Read()
{
return "abcde";
}
}
class Program
{
static void Main()
{
IFirst a = new Dual();
ISecond b = new Dual();
Console.WriteLine(a.Read() + " " + b.Read());
}
}
Результат выполнения кода:
12345 abcde
Смотрите также
-
реализация интерфейса,
которая задаёт контракт для класса -
new,
который скрывает одноимённый член базы -
as,
который безопасно приводит к интерфейсу -
private,
который ограничивает доступ к члену класса