Nesne tabanlı programlamada sınıflar, tek başlarına bir veri taşımazlar; bunlar sadece soyut kod bloklarıdır. Bir nesneyi somutlaştıran iki temel yapı vardır: Veri (alanlar) ve metotlar. Alanlar (fields), sınıf içerisinde tanımlanan ve nesnenin durumunu temsil eden değişkenlerdir. İsim, yaş, kilo gibi veriler bu alanlarda tutulur. Alan tanımlanırken değişkenin tipi (int, string vb.) önemli değildir; sınıf gövdesinde tanımlanan her değişken bir alandır. Ancak metotların içerisinde tanımlanan değişkenler 'alan' olarak kabul edilmezler. Alanlar, sınıfın farklı metotları arasında ortak veri paylaşımı sağlamak amacıyla sınıf seviyesinde tanımlanırlar. Alanlara erişim, 'erişim belirleyiciler' (public, private gibi) ile kontrol edilir. 'Public' olarak tanımlanan bir alan, sınıf dışından da erişilebilir durumdadır. Sınıf içerisinden alanlara erişirken 'this' anahtar kelimesi kullanılır. 'This', o anki nesne örneğini temsil eder ve özellikle metot içindeki yerel değişkenlerle alan isimleri çakıştığında, sınıfın kendi alanına ulaşmak için zorunludur. Özellikler (properties), sınıf içindeki değişkenlere kontrollü ve güvenli erişim sağlayan mekanizmalardır. Doğrudan alanlara erişmek yerine, özellikler üzerinden veri okuma ve yazma işlemleri gerçekleştirilir. Bu yapı, verinin dışarıdan doğrudan değiştirilmesini engelleyerek nesne güvenliğini artırır. Özellikler, 'get' ve 'set' adı verilen iki temel erişimciye sahiptir. 'Get' erişimcisi veriyi okumak (döndürmek) için, 'set' erişimcisi ise veriyi atamak için kullanılır. Eğer bir özellik sadece 'get' bloğuna sahipse 'salt okunur', sadece 'set' bloğuna sahipse 'sadece yazılabilir' özellik olarak adlandırılır. Özelliklerin en büyük avantajı, değer atama veya okuma sırasında mantıksal kontroller yapabilme imkanı sunmasıdır. Örneğin, bir not girişi yapılırken 'set' bloğu içerisinde 'if' yapısı ile değerin 50'den küçük olup olmadığı kontrol edilebilir. Bu sayede hatalı verilerin sınıfa girmesi engellenmiş olur. Otomatik eşlenen özellikler (auto-implemented properties), kod yazımını hızlandırmak ve basitleştirmek için kullanılan bir yapıdır. Klasik özellik tanımlamalarında, veriyi tutacak bir 'alan' (field) tanımlanması ve ardından 'get/set' bloklarının bu alanı kullanması gerekir. Otomatik eşlenen özelliklerde ise arka planda veriyi tutacak alanı yazılımcı tanımlamaz; derleyici bunu otomatik olarak halleder. 'public string Isim { get; set; }' şeklinde yapılan bir tanımlama, arka planda gerekli tüm işlemleri kendi kendine yönetir. Bu yöntem, özellikle karmaşık bir mantıksal kontrol gerektirmeyen, sadece veri saklama amaçlı özellikler için oldukça pratiktir. Kodun okunabilirliğini artırır ve gereksiz satır kalabalığını ortadan kaldırır.