02 — C# / .NET P0 Review
Value type vs reference type
Know value/reference semantics, struct vs class, assignment behavior, boxing/unboxing.
Do not oversimplify as value type = stack, reference type = heap.
OOP
Encapsulation, Abstraction, Inheritance, Polymorphism.
Interface vs abstract class
Interface: contract/capability, dependency boundary.
Abstract class: shared behavior/state/lifecycle.
Good answer:
I prefer interfaces for contracts and dependency boundaries. I use an abstract class when implementations genuinely share behavior or state.
Overload vs override
Overload: same name, different parameters, compile-time resolution.
Override: derived implementation of virtual/abstract member, runtime polymorphism.
== vs Equals vs ReferenceEquals
== operator
Equals logical/value equality
ReferenceEquals same object reference
Know IEquatable, GetHashCode(), record.
async/await
Critical:
async/await does not necessarily create a new thread.
I/O flow:
start I/O → await → thread is free → operation completes → continuation resumes
Know Task, Task, Task.WhenAll, CancellationToken.
Avoid .Result, .Wait(), async void except event handlers.
Dependency Injection
Why: loose coupling, testability, dependency inversion.
Transient = new instance
Scoped = usually per request
Singleton = app lifetime
Singleton should not directly depend on Scoped service.
ASP.NET Core pipeline
Request → middleware → authentication → authorization → routing → endpoint → service → persistence/external systems
Authentication vs authorization
Authentication = who are you?
Authorization = what can you do?
REST
GET, POST, PUT, PATCH, DELETE
200, 201, 204, 400, 401, 403, 404, 409, 422, 500
Quick questions
- Interface vs abstract class?
- Overload vs override?
- How does async/await work?
- Does async create a new thread?
- Scoped vs Singleton?
- Authentication vs authorization?
- What is middleware?
- Why DI?