Start here. This is the direct spoken answer to practice first.
Overview
Abstraction is easy to reduce to "hiding details," but a useful answer must also explain which behavior remains visible and why that boundary helps callers.
Abstraction is the design practice of exposing the essential behavior a caller needs while hiding implementation details that the caller should not depend on. In C#, the abstraction may be an interface, an abstract or concrete class, or even a well-designed method; the important part is the contract, not the syntax. An IPaymentGateway.Authorize operation lets order code request a payment outcome without knowing the provider's HTTP endpoints or serialization format. A useful abstraction reduces the knowledge required at the call site while preserving semantics the caller must handle.