C# dili tam anlamıyla nesne tabanlı bir dildir. Bu dil içerisinde sınıf kavramının önemli bir yeri vardır. Bu kavramı iyi anlamak, her türlü teknikte, sınıfların avantajlarından yararlanmanızı ve kendinize özgü nesnelere sahip olabilmenizi sağlar. Zaten .NET teknolojisinde yer alan her nesne, mutlaka sınıflardan türetilmelidir.
Çevremize baktığımız zaman, çok çeşitli canlılar görürüz. Örneğin çiçekler. Dünya üzerinde kaç tür (cins) çiçek olduğunu bileniniz var mı? Ama biz bir çiçek gördüğümüzde ona çoğunlukla “Çiçek” diye hitap ederiz özellikle adını bilmiyorsak. Sonra bu çiçeğin renginden, yapraklarının şeklinden, ait olduğu türden, adından bahsederiz. Çiçek tüm bu çiçekler için temel bir sınıf olarak kabul edilebilir. Dünya üzerindeki tüm çiçeklerin ortak nitelikleri vardır. Her çiçeğin bir renginin (renklerinin) olması gibi. İşte nesne tabanlı programa kavramında bahsedilen ve her şeyin temelini oluşturan sınıf kavramı bu benzetme ile tamamen aynıdır. Çiçek bir sınıf olarak algılanırken, sokakta gördüğümüz her çiçek bu sınıfın ortak özelliklerine sahip birer nesne olarak nitelendirilebilir. Ancak tabii ki çiçeklerde arasında da türler mevcuttur. Bu türler ise, çiçek temel sınıfından türeyen kendi belirli özellikleri dışında çiçek sınıfının özelliklerini de kalıtsal olarak alan başka sınıflardır. Bu yaklaşım Inheritence (kalıtım) kavramı olarak ele alınır ve nesne tabanlı programlanın temel üç öğesinden biridir. Çiçek sınıfından gerçek C# ortamına geçtiğimizde, her şeyin bir nesne olduğunu görürüz. Ancak her nesne temel olarak Object sınıfından türemektedir. Yani her şeyin üstünde bir sınıf kavramı vardır. Sınıflar, birtakım üyelere sahiptir. Bu üyeler, bu sınıftan örneklendirilen nesneler için farklı değerlere sahip olur. Yani bir sınıf varken, bu sınıftan örneklendirilmiş n sayıda nesne oluşturabiliriz. Kaldı ki, bu nesnelerin her biri tanımlandığı sınıf için ayrı ayrı özelliklere sahip olabilir.