Sınıflara giriş
Referans türleri
olarak tanımlanan bir class
tür bir başvuru türüdür. Çalışma zamanında, bir başvuru türünün değişkenini bildirdiğinizde, aşağıdaki örnekte gösterildiği gibi işlecini kullanarak new
sınıfın bir örneğini açıkça oluşturana veya başka bir yerde oluşturulmuş uyumlu türde bir nesne atayana kadar değişken değerini null
içerir:
//Declaring an object of type MyClass.
MyClass mc = new MyClass();
//Declaring another object of the same type, assigning it the value of the first object.
MyClass mc2 = mc;
Nesne oluşturulduğunda, söz konusu nesne için yönetilen yığında yeterli bellek ayrılır ve değişken yalnızca söz konusu nesnenin konumuna bir başvuru tutar. Bir nesne tarafından kullanılan bellek, atık toplama olarak bilinen CLR'nin otomatik bellek yönetimi işlevi tarafından geri kazanılır. Çöp toplama hakkında daha fazla bilgi için bkz . Otomatik bellek yönetimi ve çöp toplama.
Sınıfları bildirme
Sınıflar, aşağıdaki örnekte gösterildiği gibi anahtar sözcüğü ve ardından benzersiz bir tanımlayıcı kullanılarak class
bildirilir:
//[access modifier] - [class] - [identifier]
public class Customer
{
// Fields, properties, methods and events go here...
}
anahtar sözcüğünden önce isteğe bağlı bir erişim değiştiricisi class
bulunur. Bir class
tür için varsayılan erişim şeklindedir internal
. public
Bu durumda kullanıldığından, herkes bu sınıfın örneklerini oluşturabilir. sınıfının adı anahtar sözcüğünü class
izler. Sınıfın adı geçerli bir C# tanımlayıcı adı olmalıdır. Tanımın geri kalanı, davranışın ve verilerin tanımlandığı sınıf gövdesidir. Bir sınıftaki alanlar, özellikler, yöntemler ve olaylar toplu olarak sınıf üyeleri olarak adlandırılır.
Nesne oluşturma
Bazen birbirinin yerine kullanılmalarına rağmen, sınıf ve nesne farklı şeylerdir. Sınıf bir nesne türü tanımlar, ancak nesnenin kendisi değildir. Nesne, bir sınıfı temel alan somut bir varlıktır ve bazen bir sınıfın örneği olarak adlandırılır.
Nesneler anahtar sözcüğü ve new
ardından sınıfın adı kullanılarak oluşturulabilir, örneğin:
Customer object1 = new Customer();
Bir sınıfın örneği oluşturulduğunda, nesneye bir başvuru programcıya geri geçirilir. Önceki örnekte, object1
tabanlı Customer
bir nesneye başvurudur. Bu başvuru yeni nesneye başvurur ancak nesne verilerinin kendisini içermez. Aslında, nesne oluşturmadan bir nesne başvurusu oluşturabilirsiniz:
Customer object2;
Böyle bir başvuru aracılığıyla bir nesneye erişmeye çalışma zamanında başarısız olduğundan, nesneye başvurmayan nesne başvuruları oluşturmanızı önermeyiz. Başvuru, yeni bir nesne oluşturarak veya var olan bir nesne atayarak bir nesneye başvurabilir, örneğin:
Customer object3 = new Customer();
Customer object4 = object3;
Bu kod, aynı nesneye başvuran iki nesne başvurusu oluşturur. Bu nedenle, aracılığıyla object3
nesnede yapılan tüm değişiklikler sonraki kullanımlarına object4
yansıtılır. Sınıfları temel alan nesneler başvuru ile başvurduğu için, sınıflar başvuru türleri olarak bilinir.
Oluşturucular ve başlatma
Önceki bölümlerde, bir sınıf türü bildirmek ve bu türün bir örneğini oluşturmak için söz dizimi sunulmuştur. Bir türün örneğini oluşturduğunuzda, alanlarının ve özelliklerinin yararlı değerlere başlatıldığından emin olmak istersiniz. Değerleri başlatmanın birkaç yolu vardır:
- Varsayılan değerleri kabul et
- Alan başlatıcıları
- Oluşturucu parametreleri
- Nesne başlatıcılar
Her .NET türünün varsayılan değeri vardır. Bu değer genellikle sayı türleri ve null
tüm başvuru türleri için 0'dır. Uygulamanızda makul olduğunda bu varsayılan değere güvenebilirsiniz.
.NET varsayılanı doğru değer değilse, alan başlatıcı kullanarak bir başlangıç değeri ayarlayabilirsiniz:
public class Container
{
// Initialize capacity field to a default value of 10:
private int _capacity = 10;
}
Çağıranların, bu ilk değeri ayarlamakla sorumlu olan bir oluşturucu tanımlayarak bir başlangıç değeri sağlamasını gerektirebilirsiniz:
public class Container
{
private int _capacity;
public Container(int capacity) => _capacity = capacity;
}
C# 12'de başlayarak, sınıf bildiriminin bir parçası olarak bir birincil oluşturucu tanımlayabilirsiniz:
public class Container(int capacity)
{
private int _capacity = capacity;
}
Sınıf adına parametre eklemek birincil oluşturucuyu tanımlar. Bu parametreler, üyelerini içeren sınıf gövdesinde kullanılabilir. Alanları başlatmak için veya ihtiyaç duyulan başka bir yerde bunları kullanabilirsiniz.
Değiştiriciyi required
bir özellikte de kullanabilir ve çağıranların özelliğin ilk değerini ayarlamak için nesne başlatıcı kullanmasına izin vekleyebilirsiniz:
public class Person
{
public required string LastName { get; set; }
public required string FirstName { get; set; }
}
Anahtar sözcüğün required
eklenmesi, çağıranların bu özellikleri bir ifadenin parçası olarak ayarlamasını zorunlu tahkir new
eder:
var p1 = new Person(); // Error! Required properties not set
var p2 = new Person() { FirstName = "Grace", LastName = "Hopper" };
Sınıf devralma
Sınıflar nesne odaklı programlamanın temel bir özelliği olan devralmayı tam olarak destekler. Bir sınıf oluşturduğunuzda, olarak sealed
tanımlanmayan diğer tüm sınıflardan devralabilirsiniz. Diğer sınıflar sınıfınızdan devralabilir ve sınıf sanal yöntemlerini geçersiz kılabilir. Ayrıca, bir veya daha fazla arabirim uygulayabilirsiniz.
Devralma bir türetme kullanılarak gerçekleştirilir; bu da bir sınıfın verileri ve davranışı devraldığı bir temel sınıf kullanılarak bildirildiği anlamına gelir. Temel sınıf, türetilmiş sınıf adından sonra iki nokta üst üste ve temel sınıfın adı eklenerek belirtilir, örneğin:
public class Manager : Employee
{
// Employee fields, properties, methods and events are inherited
// New Manager fields, properties, methods and events go here...
}
Bir sınıf bildirimi bir temel sınıf içerdiğinde, oluşturucular dışında temel sınıfın tüm üyelerini devralır. Daha fazla bilgi için bkz . Devralma.
C# içindeki bir sınıf yalnızca bir temel sınıftan doğrudan devralabilir. Ancak, bir temel sınıfın kendisi başka bir sınıftan devralabildiğinden, bir sınıf dolaylı olarak birden çok temel sınıfı devralabilir. Ayrıca, bir sınıf doğrudan bir veya daha fazla arabirim uygulayabilir. Daha fazla bilgi için bkz . Arabirimler.
Sınıf olarak abstract
bildirilebilir. Soyut sınıf, imza tanımına sahip olan ancak uygulaması olmayan soyut yöntemler içerir. Soyut sınıflar örneği oluşturulamaz. Bunlar yalnızca soyut yöntemleri uygulayan türetilmiş sınıflar aracılığıyla kullanılabilir. Buna karşılık, korumalı bir sınıf diğer sınıfların ondan türetilmiş olmasına izin vermez. Daha fazla bilgi için bkz . Soyut ve Korumalı Sınıflar ve Sınıf Üyeleri.
Sınıf tanımları farklı kaynak dosyalar arasında bölünebilir. Daha fazla bilgi için bkz . Kısmi Sınıflar ve Yöntemler.
C# Dil Belirtimi
Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır.