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ş olabilecek 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. 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ı Customerbir 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. Bir nesneye başvurmak için, yeni bir nesne oluşturularak veya var olan bir nesne atanarak bir başvuru yapılabilir, ö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 object4yansı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 sealedtanı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 devralabileceğ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 abstractbildirilebilir. 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.