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

  1. Interface vs abstract class?
  2. Overload vs override?
  3. How does async/await work?
  4. Does async create a new thread?
  5. Scoped vs Singleton?
  6. Authentication vs authorization?
  7. What is middleware?
  8. Why DI?