C# sınıfları

Tavsiye

Yazılım geliştirme konusunda yeni misiniz? İlk olarak Başlangıç öğreticileri ile başlayın. Davranış ve durum bilgisi olan nesneleri modellemeniz gerektiğinde sınıflarla karşılaşırsınız.

Başka bir dilde mi deneyimlisiniz? C# sınıfları, Java veya C++ içindeki sınıflara benzer. C#'ye özgü desenler için nesne başlatıcılar bölümünü inceleyin ve veri odaklı bir alternatif için kayıtlar bölümüne bakın.

Sınıf, nesneler için şema tanımlayan bir başvuru türüdür. Sınıf türünde bir değişken oluşturduğunuzda, değişken yönetilen yığındaki bir nesneye başvuru tutar. Değişken, nesne verilerinin kendisini tutmaz. Bir sınıf değişkeninin başka bir değişkene atanması başvuruyu kopyalar, böylece her iki değişken de aynı nesneye işaret eder. Sınıflar, C# dilinde özel türleri tanımlamanın en yaygın yoludur. Referanslar arasında karmaşık davranış, kalıtım veya paylaşılan kimlik gerektiğinde bunları kullanın.

Sınıfların ne zaman kullanılacağı

Aşağıdaki durumlarda bir sınıf kullanın:

  • Türün karmaşık davranışı vardır veya değişebilir bir durumu yönetir.
  • Türetilmiş özelleştirmelere sahip bir temel sınıf oluşturmak veya var olan bir sınıfı genişleten türetilmiş bir tür oluşturmak için devralma gerekir.
  • Örnekler, eşit değerleri tutan nesneleri değil paylaşılan bir kimliği temsil eder. Aynı nesneye yapılan iki başvuru eşitlenmiş durumda kalmalıdır.
  • Türü büyük veya uzun ömürlüdür ve yığın ayırma ve başvuru semantiğinden yararlanır.

Sınıf tanımlama

Anahtar sözcüğünü ve class ardından tür adını içeren bir sınıf tanımlayın. İsteğe bağlı erişim değiştirici görünürlüğü denetler. Varsayılan değer: internal. "public" sözcüğünü, diğer derlemelerden çağıranların türlerinizi kullanmasına izin vermek için belirtin.

public class Customer
{
    public string Name { get; set; }

    public Customer(string name) => Name = name;
}

Sınıf gövdesi, topluca sınıf üyeleri olarak adlandırılan alanları, özellikleri, yöntemleri ve olayları içerir. Ad geçerli bir C# tanımlayıcı adı olmalıdır.

Nesneler oluşturma

Sınıf bir tür tanımlar, ancak nesnenin kendisi değildir. Anahtar sözcüğüyle bir nesne (sınıfın new) oluşturursunuz:

var customer = new Customer("Allison");
Console.WriteLine(customer.Name); // Allison

değişken customer , nesnenin kendisine değil nesneye bir başvuru tutar. Aynı nesneye birden çok değişken atayabilirsiniz. Diğerindeki bir referans üzerinden yapılmış değişiklikler diğer referans üzerinden de görülebilir.

var c1 = new Customer("Grace");
var c2 = c1; // both variables reference the same object

c2.Name = "Hopper";
Console.WriteLine(c1.Name); // Hopper — c1 sees the change made through c2

Bu başvuru paylaşım davranışı, sınıflar ve yapılar arasındaki ayrımlardan biridir. Yapılar ile birlikte atama işlemi verileri kopyalar. Daha da önemlisi, sınıflar devralmayı destekler. Türetilmiş türlerin temel sınıftan davranışı yeniden kullanmaları ve özelleştirmeleri için hiyerarşiler oluşturabilirsiniz. Yapılar devralma hiyerarşilerine katılamaz. Ayrım hakkında daha fazla bilgi için bkz . Değer türleri ve başvuru türleri.

Oluşturucular ve başlatma

Bir örnek oluşturduğunuzda, alanlarının ve özelliklerinin yararlı değerlere başlatılmasını istersiniz. C# çeşitli yaklaşımlar sunar: alan başlatıcılar, oluşturucu parametreleri, birincil oluşturucular ve gerekli özellikler.

Alan başlatıcıları , doğrudan alan bildiriminde varsayılan bir değer ayarlar:

public class Container
{
    private int _capacity = 10;
}

Alan başlatıcıları bir alana veya özelliğe makul bir varsayılan değer atar. Bu durum, çağıranların ilk değeri sağlayabildiği aşağıdaki yaklaşımlardan farklılık gösterir.

Oluşturucu parametreleri için çağıranların değer sağlaması gerekir:

public class Container
{
    private int _capacity;

    public Container(int capacity) => _capacity = capacity;
}

Birincil oluşturucular (C# 12+) doğrudan sınıf bildirimine parametre ekler. Bu parametreler sınıf gövdesinde kullanılabilir:

public class Container(int capacity)
{
    private int _capacity = capacity;
}

Birincil oluşturucular ve alan başlatıcıları birlikte çalışabilir: alan başlatıcı _capacity = capacity , değeri olarak birincil oluşturucu parametresini kullanır. Bu düzen, tek ve kısa bir bildirim içeren alanlarda oluşturucu bağımsız değişkenlerini yakalamanıza olanak tanır.

Gerekli özellikler , çağıranların belirli özellikleri bir nesne başlatıcı aracılığıyla ayarlamasını zorunlu kılabilir:

public class Person
{
    public required string FirstName { get; set; }
    public required string LastName { get; set; }
}
// var missing = new Person(); // Error: required properties not set
var person = new Person { FirstName = "Grace", LastName = "Hopper" };
Console.WriteLine($"{person.FirstName} {person.LastName}"); // Grace Hopper

Parametre doğrulama ve oluşturucu zincirleme dahil olmak üzere oluşturucu desenlerine daha ayrıntılı bir bakış için bkz. Oluşturucular.

Statik sınıflar

Sınıf static örneği oluşturulamaz ve yalnızca statik üyeler içerir. Örnek verileri üzerinde çalışmayan yardımcı program yöntemlerini düzenlemek için statik sınıfları kullanın:

static class MathHelpers
{
    public static double CircleCircumference(double radius) =>
        2 * Math.PI * radius;
}
double circumference = MathHelpers.CircleCircumference(5.0);
Console.WriteLine($"Circumference: {circumference:F2}"); // Circumference: 31.42

.NET sınıf kitaplığı, Math ve Console gibi birçok statik sınıf içerir. Statik bir sınıf örtük olarak mühürlenmiştir. Bundan türetemez veya örneği oluşturamazsınız.

Nesne başlatıcılar

Nesne başlatıcılar , her değer bileşimi için bir oluşturucu yazmadan bir nesne oluşturduğunuzda özellikleri ayarlamanıza olanak sağlar:

class ConnectionOptions
{
    public string Host { get; init; } = "localhost";
    public int Port { get; init; } = 80;
    public bool UseSsl { get; init; }
}
var options = new ConnectionOptions
{
    Host = "db.example.com",
    Port = 5432,
    UseSsl = true
};
Console.WriteLine($"{options.Host}:{options.Port} (SSL: {options.UseSsl})");
// db.example.com:5432 (SSL: True)

Nesne başlatıcılar, set veya init erişimcisine sahip herhangi bir erişilebilir özellikle çalışır. Doğal olarak required özellikleriyle ve bazı parametreleri kabul eden oluşturucularla birleştirilirler, bu sırada çağıranın diğerlerini ayarlamasına olanak tanır.

Özelliği bir koleksiyon olduğunda, bu nesneyi başlatmak için bir Collection ifadeleri (C# başvurusu) kullanabilirsiniz.

Kalıtım

Sınıflar devralmayı destekler. Mevcut bir sınıfın davranışını yeniden kullanan, genişleten veya değiştiren yeni bir sınıf tanımlayabilirsiniz. öğesinden devraldığınız sınıf temel sınıf, yeni sınıf ise türetilmiş sınıftır:

var manager = new Manager("Satya", "Engineering");
Console.WriteLine($"{manager.Name} manages {manager.Department}");
// Satya manages Engineering

Bir sınıf bir temel sınıftan devralabilir ve birden çok arabirim uygulayabilir. Türetilmiş sınıflar oluşturucular dışında temel sınıfın tüm üyelerini devralır. Daha fazla bilgi için bkz: Devralma ve Arabirimler.

Ayrıca bakınız