Nesne yönelimli programlama (OOP), yazılım geliştirme sürecini sistematikleştiren ve kodun anlaşılabilirliğini artıran bir paradigmadır. Bu yaklaşımın temel taşları sınıf (class), nesne (object) ve metotlardır. Sınıf, nesnelerin sahip olacağı özellikleri ve gerçekleştireceği işlevleri tanımlayan bir şablondur; nesne ise bu şablondan türetilen somut bir değişkendir. Sınıflar, verilerin düzenli bir yapıda tutulmasını sağlar ve kod tekrarını önler. Bir sınıftan birden fazla nesne oluşturulabilir ve her nesne, sınıfın tanımladığı özelliklere (properties) ve metotlara sahip olur. Örneğin, 'Motorlu Araçlar' bir sınıf olarak tanımlandığında, otomobil, uçak veya kamyon gibi araçlar bu sınıftan türetilen nesnelerdir. C#'ta bir sınıf tanımlamak için 'class' anahtar sözcüğü kullanılır. Sınıfın içine değişkenler, sabitler ve metotlar eklenebilir. Sınıfın üyelerine erişim, 'erişim türü' (access modifier) ile belirlenir. 'Public' olarak tanımlanan üyeler sınıf dışından erişilebilirken, 'private' olarak tanımlananlar sadece sınıfın kendi içinden erişilebilir durumdadır. Bir sınıftan yeni bir nesne oluşturmak için 'new' anahtar sözcüğü kullanılır. Bu işlem, tanımlanan sınıfın bir kopyasının hafızada oluşturulmasını sağlar. Nesne oluşturulduktan sonra, nokta (.) operatörü ile sınıf içerisindeki özelliklere değer atanabilir veya bu özellikler okunabilir. Metotlar, nesnenin gerçekleştirdiği işlevleri barındıran fonksiyonlardır. Bir metot çağrıldığında, o metoda ilgili nesnenin referansı otomatik olarak aktarılır. Bu referans 'this' anahtar sözcüğü ile ifade edilir. 'this', sınıfın üye elemanları ile metodun parametreleri aynı isme sahip olduğunda, aradaki karışıklığı gidermek için kullanılır. Örneğin, bir sınıfın 'en' ve 'boy' adında iki özelliği varsa ve bir metot da aynı isimde parametreler alıyorsa, 'this.en = en;' ifadesi, metodun parametresindeki değeri sınıfın 'en' özelliğine atar. Bu sayede programcı, sınıfın kendi değişkeni ile dışarıdan gelen parametreyi net bir şekilde ayırt edebilir. Sınıf özelliklerine doğrudan (public) erişim, verilerin kontrolsüz değiştirilmesine yol açabilir. Bu riski önlemek için özellikler 'private' tanımlanır ve 'get' ile 'set' blokları kullanılarak kontrollü bir erişim sağlanır. 'Get' bloğu özelliğin değerini okumak için, 'set' bloğu ise özelliğe değer atamak için kullanılır. 'Get' bloğu içerisinde 'return' komutu ile değer geri döndürülür. 'Set' bloğunda ise dışarıdan gönderilen değer, 'value' isimli özel bir anahtar sözcük ile yakalanır. Bu yapı, atanan değerlerin belirli bir aralıkta olup olmadığını (örneğin yaşın negatif olmaması gibi) kontrol etmeye olanak tanır. Eğer bir özellik için sadece 'get' bloğu tanımlanırsa o özellik sadece okunabilir olur; sadece 'set' bloğu tanımlanırsa sadece yazılabilir olur. Bu mekanizma, nesne yönelimli programlamada verinin güvenliğini ve tutarlılığını sağlamak için kritik bir öneme sahiptir. Kalıtım, bir sınıftan başka bir sınıf türetme işlemidir. Mevcut bir 'A' sınıfından 'B' sınıfı türetildiğinde, B sınıfı A'nın sahip olduğu tüm özellikleri ve metotları devralır ve üzerine kendi yeni özelliklerini ekleyebilir. Bu, yazılımda kodun yeniden kullanılabilirliğini en üst düzeye çıkarır. C#'ta bir sınıfın başka bir sınıftan türetildiğini belirtmek için iki nokta üst üste (:) işareti kullanılır (Örn: 'class B : A'). Bu sembol, B sınıfının A sınıfının bir alt sınıfı olduğunu ifade eder. Örneğin, 'Beyaz Eşya' genel bir sınıf olarak tanımlanıp renk, fiyat ve marka özellikleri eklendiğinde, 'Buzdolabı' sınıfı bu sınıftan türetilerek 'raf sayısı' gibi kendine özgü özelliklerle genişletilebilir. Böylece her yeni cihaz için temel özellikleri tekrar tanımlamak gerekmez.