... сформулировано так, как программист мог бы
понимать.
Если вы не программист, у вас возникнут небольшие проблемы с пониманием интерфейсов. Без достаточно хорошего понимания основных объектно-ориентированных принципов это может показаться немного запутанным. Но далее:
Интерфейсы похожи на классы, но вместо того, чтобы сообщать вам, что является объектом , он говорит вам, что он делает .
Например, очень распространенный интерфейс - IEnumerable
. Когда класс реализует этот интерфейс, это означает, что объект может создать и вернуть Enumerator
, который может использоваться другой частью кода (обычно цикл foreach
или запрос LINQ
).
Еще один, который вы можете увидеть, это IDisposable
. Это означает, что вы вызываете вызов .Dispose()
для объекта, и он очистит ресурсы. Он ничего не говорит о том, какие ресурсы он будет очищать или что это за объект - это может быть StreamReader
или SqlConnection
или что-то в этом роде. Все, что он говорит, - это то, что у него есть метод с именем Dispose
.
Интерфейсы - очень полезные понятия. Если у вас много классов, которые сильно отличаются друг от друга, но имеют общее поведение, вы можете заставить их реализовать один интерфейс, а затем работать с ними как с одним. Например, если у вас был интерфейс:
interface ICanPrintMyContents
{
void PrintContents();
}
Затем группа классов, которые их реализовали:
class ParkingGarage : ICanPrintMyContents { ... }
class UnimpressivePolitician : ICanPrintMyContents { ... }
class BankingSimulation : ICanPrintMyContents { ... }
Вы можете поместить их всех в список вместе, даже если между их классами нет реальной связи.
List<ICanPrintMyContents> list = { theGarage, insertNameHere, sim1, anotherGarage };
foreach(ICanPrintMyContents item in list)
list.PrintContents();
(Примечание: соглашение о присвоении имен ICan...
широко не используется, и я не советую его. Многим это не нравится, но я использую его здесь, потому что оно очень хорошо передает смысл интерфейса Более распространенным будет IPrintableContents
или что-то)