Я просто не могу понять, почему IAsyncResult - это интерфейс, а не простой объект. Насколько я правильно помню, интерфейс содержит только имена методов без реализации, поэтому я не вижу, как он используется здесь, поскольку я не получаю какой-либо его класс и не переопределяю его методы? Я просто запуталась .. спасибо
Iasyncresult - почему это не просто объект, а интерфейс?
Ответы (3)
Если бы это был просто объект, это могло бы быть что угодно - и вы могли бы не полагаться на определенные свойства и / или методы, как вы можете, когда знаете, что получите объект, реализующий интерфейс. IAsyncResult
.
Поскольку возвращаемый объект должен реализовывать рассматриваемый интерфейс, вы можете полагаться на тот факт, что будут присутствовать свойства AsyncState
, AsyncWaitHandle
, CompletedSynchronously
и IsCompleted
.
Если бы у вас был только объект и вы получили int
- как бы вы получили те свойства, которые вам нужны ??
Таким образом, результатом может быть объект любого типа, реализующий интерфейс IAsyncResult.
Вы правы, что интерфейс содержит только методы / свойства без реализации. В этом случае гарантируется, что объект AsyncResult содержит методы, необходимые для «Async-framework».
IAsyncResult содержит четыре свойства:
- AsyncState (объект)
- AsyncWaitHandle (WaitHandle)
- CompletedSynchronously (логическое)
- IsCompleted (логический)
Эти свойства просто необходимы при работе с методами Async. Если бы это был объект, я думаю, вы были бы менее гибкими.
Потому что «ASyncResult» сам по себе не является чем-то конкретным.
Поскольку C # допускает только одиночное наследование, сделав его интерфейсом, вы можете реализовать его для любого типа объекта по вашему выбору.
Например, если мой метод возвращает тип Foo, я могу создать асинхронный возвращаемый тип для своего приложения, просто создав подкласс, говорящий
FooAsync : Foo, IAsyncResult
И просто приведите его вместо написания кода для извлечения значений.